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

testcases.py 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import httplib
  2. from django.test import TestCase
  3. from django.test.client import Client
  4. from django.core.urlresolvers import reverse
  5. from django_webtest import WebTest
  6. from purl import URL
  7. from oscar.core.compat import get_user_model
  8. User = get_user_model()
  9. class ClientTestCase(TestCase):
  10. """
  11. Helper TestCase for using Django's test client. The class provides
  12. auto-creation of a user to avoid boilerplate code.
  13. """
  14. username = 'dummyuser'
  15. email = 'dummyuser@example.com'
  16. password = 'staffpassword'
  17. is_anonymous = False
  18. is_staff = False
  19. is_superuser = False
  20. def setUp(self):
  21. self.client = Client()
  22. if not self.is_anonymous:
  23. self.login()
  24. def login(self):
  25. self.user = self.create_user()
  26. self.client.login(username=self.username,
  27. password=self.password)
  28. def create_user(self):
  29. user = User.objects.create_user(self.username,
  30. self.email,
  31. self.password)
  32. user.is_staff = self.is_staff
  33. user.is_superuser = self.is_superuser
  34. user.save()
  35. return user
  36. def assertIsRedirect(self, response, expected_url=None):
  37. self.assertTrue(response.status_code in (httplib.FOUND,
  38. httplib.MOVED_PERMANENTLY))
  39. if expected_url:
  40. location = URL.from_string(response['Location'])
  41. self.assertEqual(expected_url, location.path())
  42. def assertRedirectUrlName(self, response, name, kwargs=None):
  43. self.assertIsRedirect(response)
  44. location = response['Location'].replace('http://testserver', '')
  45. self.assertEqual(location, reverse(name, kwargs=kwargs))
  46. def assertIsOk(self, response):
  47. self.assertEqual(httplib.OK, response.status_code)
  48. def assertInContext(self, response, key):
  49. self.assertTrue(key in response.context,
  50. "Context should contain a variable '%s'" % key)
  51. class WebTestCase(WebTest):
  52. is_staff = False
  53. is_anonymous = True
  54. username = 'testuser'
  55. email = 'testuser@buymore.com'
  56. password = 'somefancypassword'
  57. def setUp(self):
  58. self.user = None
  59. if not self.is_anonymous or self.is_staff:
  60. self.user = User.objects.create_user(self.username, self.email,
  61. self.password)
  62. self.user.is_staff = self.is_staff
  63. self.user.save()
  64. def get(self, url, **kwargs):
  65. kwargs.setdefault('user', self.user)
  66. return self.app.get(url, **kwargs)
  67. def post(self, url, **kwargs):
  68. kwargs.setdefault('user', self.user)
  69. return self.app.post(url, **kwargs)
  70. def assertRedirectsTo(self, response, url_name):
  71. self.assertTrue(str(response.status_code).startswith('3'))
  72. location = response.headers['Location']
  73. redirect_path = location.replace('http://localhost:80', '')
  74. self.assertEqual(reverse(url_name), redirect_path)