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 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)