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

phonenumber_tests.py 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #-*- coding: utf-8 -*-
  2. from django.test.testcases import TestCase
  3. from django.db import models
  4. from django import forms
  5. from oscar.core.phonenumber import PhoneNumber
  6. from oscar.models.fields import PhoneNumberField
  7. class MandatoryPhoneNumber(models.Model):
  8. phone_number = PhoneNumberField()
  9. class OptionalPhoneNumber(models.Model):
  10. phone_number = PhoneNumberField(blank=True, default='')
  11. class PhoneNumberForm(forms.ModelForm):
  12. class Meta:
  13. model = MandatoryPhoneNumber
  14. fields = ['phone_number']
  15. valid_number = '+4917696842671'
  16. equal_number_strings = ['+44 113 8921113', '+441138921113']
  17. local_numbers = [
  18. ('GB', '01606 751 78'),
  19. ('DE', '0176/96842671'),
  20. ]
  21. invalid_numbers = ['+44 113 892111', ]
  22. class TestPhoneNumberTestCase(TestCase):
  23. def test_valid_numbers_are_valid(self):
  24. numbers = [PhoneNumber.from_string(number_string)
  25. for number_string in equal_number_strings + [valid_number]]
  26. self.assertTrue(all([number.is_valid() for number in numbers]))
  27. numbers = [PhoneNumber.from_string(number_string, region=region)
  28. for region, number_string in local_numbers]
  29. self.assertTrue(all([number.is_valid() for number in numbers]))
  30. def test_invalid_numbers_are_invalid(self):
  31. numbers = [PhoneNumber.from_string(number_string)
  32. for number_string in invalid_numbers]
  33. self.assertTrue(all([not number.is_valid() for number in numbers]))
  34. class TestPhoneNumberFieldTestCase(TestCase):
  35. def test_objects_with_same_number_are_equal(self):
  36. numbers = [
  37. MandatoryPhoneNumber(phone_number=number_string).phone_number
  38. for number_string in equal_number_strings]
  39. self.assertTrue(all(n == numbers[0] for n in numbers))
  40. def test_field_returns_correct_type(self):
  41. instance = OptionalPhoneNumber()
  42. self.assertEqual(instance.phone_number, None)
  43. instance.phone_number = valid_number
  44. self.assertEqual(type(instance.phone_number), PhoneNumber)
  45. def test_can_assign_string_phone_number(self):
  46. instance = MandatoryPhoneNumber()
  47. instance.phone_number = valid_number
  48. self.assertEqual(type(instance.phone_number), PhoneNumber)
  49. self.assertEqual(instance.phone_number.as_e164, valid_number)
  50. def test_can_assign_phone_number(self):
  51. phone = MandatoryPhoneNumber()
  52. phone.phone_number = PhoneNumber.from_string(valid_number)
  53. self.assertEqual(type(phone.phone_number), PhoneNumber)
  54. self.assertEqual(phone.phone_number.as_e164, valid_number)
  55. class TestPhoneNumberFormFieldTestCase(TestCase):
  56. def test_form_to_instance_flow(self):
  57. form = PhoneNumberForm({'phone_number': valid_number})
  58. self.assertTrue(form.is_valid())
  59. instance = form.save(commit=False)
  60. self.assertTrue(type(instance.phone_number), PhoneNumber)
  61. self.assertEqual(instance.phone_number.as_e164, valid_number)