You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

__init__.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 purl import URL
  7. @contextmanager
  8. def patch_settings(**kwargs):
  9. from django.conf import settings
  10. backup = {}
  11. for key, value in kwargs.items():
  12. if hasattr(settings, key):
  13. backup[key] = getattr(settings, key)
  14. setattr(settings, key, value)
  15. yield
  16. for key, value in backup.items():
  17. setattr(settings, key, value)
  18. class ClientTestCase(TestCase):
  19. username = 'dummyuser'
  20. email = 'dummyuser@example.com'
  21. password = 'staffpassword'
  22. is_anonymous = False
  23. is_staff = False
  24. is_superuser = False
  25. def setUp(self):
  26. self.client = Client()
  27. if not self.is_anonymous:
  28. self.user = self.create_user()
  29. self.client.login(username=self.username,
  30. password=self.password)
  31. def create_user(self):
  32. user = User.objects.create_user(self.username,
  33. self.email,
  34. self.password)
  35. user.is_staff = self.is_staff
  36. user.is_superuser = self.is_superuser
  37. user.save()
  38. return user
  39. def assertIsRedirect(self, response, expected_url=None):
  40. self.assertTrue(response.status_code in (httplib.FOUND,
  41. httplib.MOVED_PERMANENTLY))
  42. if expected_url:
  43. location = URL.from_string(response['Location'])
  44. self.assertEqual(expected_url, location.path())
  45. def assertIsOk(self, response):
  46. self.assertEqual(httplib.OK, response.status_code)
  47. def assertInContext(self, response, key):
  48. self.assertTrue(key in response.context, "Context should contain a variable '%s'" % key)