Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

phonenumber_tests.py 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 Meta:
  10. app_label = 'tests'
  11. class OptionalPhoneNumber(models.Model):
  12. phone_number = PhoneNumberField(blank=True, default='')
  13. class Meta:
  14. app_label = 'tests'
  15. class PhoneNumberForm(forms.ModelForm):
  16. class Meta:
  17. model = MandatoryPhoneNumber
  18. fields = ['phone_number']
  19. valid_number = '+4917696842671'
  20. equal_number_strings = ['+44 113 8921113', '+441138921113']
  21. local_numbers = [
  22. ('GB', '01606 751 78'),
  23. ('DE', '0176/96842671'),
  24. ]
  25. invalid_numbers = ['+44 113 892111', ]
  26. class TestPhoneNumberTestCase(TestCase):
  27. def test_valid_numbers_are_valid(self):
  28. numbers = [PhoneNumber.from_string(number_string)
  29. for number_string in equal_number_strings + [valid_number]]
  30. self.assertTrue(all([number.is_valid() for number in numbers]))
  31. numbers = [PhoneNumber.from_string(number_string, region=region)
  32. for region, number_string in local_numbers]
  33. self.assertTrue(all([number.is_valid() for number in numbers]))
  34. def test_invalid_numbers_are_invalid(self):
  35. numbers = [PhoneNumber.from_string(number_string)
  36. for number_string in invalid_numbers]
  37. self.assertTrue(all([not number.is_valid() for number in numbers]))
  38. class TestPhoneNumberFieldTestCase(TestCase):
  39. def test_objects_with_same_number_are_equal(self):
  40. numbers = [
  41. MandatoryPhoneNumber(phone_number=number_string).phone_number
  42. for number_string in equal_number_strings]
  43. self.assertTrue(all(n == numbers[0] for n in numbers))
  44. def test_field_returns_correct_type(self):
  45. instance = OptionalPhoneNumber()
  46. self.assertEqual(instance.phone_number, None)
  47. instance.phone_number = valid_number
  48. self.assertEqual(type(instance.phone_number), PhoneNumber)
  49. def test_can_assign_string_phone_number(self):
  50. instance = MandatoryPhoneNumber()
  51. instance.phone_number = valid_number
  52. self.assertEqual(type(instance.phone_number), PhoneNumber)
  53. self.assertEqual(instance.phone_number.as_e164, valid_number)
  54. def test_can_assign_phone_number(self):
  55. phone = MandatoryPhoneNumber()
  56. phone.phone_number = PhoneNumber.from_string(valid_number)
  57. self.assertEqual(type(phone.phone_number), PhoneNumber)
  58. self.assertEqual(phone.phone_number.as_e164, valid_number)
  59. class TestPhoneNumberFormFieldTestCase(TestCase):
  60. def test_form_to_instance_flow(self):
  61. form = PhoneNumberForm({'phone_number': valid_number})
  62. self.assertTrue(form.is_valid())
  63. instance = form.save(commit=False)
  64. self.assertTrue(type(instance.phone_number), PhoneNumber)
  65. self.assertEqual(instance.phone_number.as_e164, valid_number)