Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

__init__.py 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import httplib
  2. from contextlib import contextmanager
  3. from django.test import TestCase
  4. from django.test.client import Client
  5. from django.contrib.auth.models import User
  6. from django.core.urlresolvers import reverse
  7. from django_webtest import WebTest
  8. from purl import URL
  9. @contextmanager
  10. def patch_settings(**kwargs):
  11. from django.conf import settings
  12. backup = {}
  13. for key, value in kwargs.items():
  14. if hasattr(settings, key):
  15. backup[key] = getattr(settings, key)
  16. setattr(settings, key, value)
  17. yield
  18. for key, value in backup.items():
  19. setattr(settings, key, value)
  20. class ClientTestCase(TestCase):
  21. username = 'dummyuser'
  22. email = 'dummyuser@example.com'
  23. password = 'staffpassword'
  24. is_anonymous = False
  25. is_staff = False
  26. is_superuser = False
  27. def setUp(self):
  28. self.client = Client()
  29. if not self.is_anonymous:
  30. self.login()
  31. def login(self):
  32. self.user = self.create_user()
  33. self.client.login(username=self.username,
  34. password=self.password)
  35. def create_user(self):
  36. user = User.objects.create_user(self.username,
  37. self.email,
  38. self.password)
  39. user.is_staff = self.is_staff
  40. user.is_superuser = self.is_superuser
  41. user.save()
  42. return user
  43. def assertIsRedirect(self, response, expected_url=None):
  44. self.assertTrue(response.status_code in (httplib.FOUND,
  45. httplib.MOVED_PERMANENTLY))
  46. if expected_url:
  47. location = URL.from_string(response['Location'])
  48. self.assertEqual(expected_url, location.path())
  49. def assertRedirectUrlName(self, response, name, kwargs=None):
  50. self.assertIsRedirect(response)
  51. location = response['Location'].replace('http://testserver', '')
  52. self.assertEqual(location, reverse(name, kwargs=kwargs))
  53. def assertIsOk(self, response):
  54. self.assertEqual(httplib.OK, response.status_code)
  55. def assertInContext(self, response, key):
  56. self.assertTrue(key in response.context,
  57. "Context should contain a variable '%s'" % key)
  58. class WebTestCase(WebTest):
  59. """
  60. Custom version of WebTest that adds a few useful assertion methods
  61. """
  62. def assertRedirectsTo(self, response, url_name):
  63. self.assertTrue(str(response.status_code).startswith('3'))
  64. location = response.headers['Location']
  65. redirect_path = location.replace('http://localhost:80', '')
  66. self.assertEqual(reverse(url_name), redirect_path)