123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- from django import forms
- from django.test import TestCase, override_settings
-
- from oscar.apps.address.forms import AbstractAddressForm
- from oscar.apps.address.models import UserAddress
- from oscar.apps.order.models import ShippingAddress
- from oscar.forms.mixins import PhoneNumberMixin
- from oscar.test.factories import CountryFactory
-
-
- class PhoneNumberMixinTestCase(TestCase):
- def test_mixin_adds_phone_number_field(self):
- class TestForm(PhoneNumberMixin, forms.Form):
- pass
-
- form = TestForm()
- self.assertIn("phone_number", form.fields)
-
- def test_mixin_adds_all_phone_number_fields(self):
- class TestForm(PhoneNumberMixin, forms.Form):
- phone_number_fields = {
- "phone_number": {
- "required": False,
- "help_text": "",
- "max_length": 32,
- "label": "Phone number",
- },
- "another_phone_number": {
- "required": False,
- "help_text": "Another phone number help text",
- "max_length": 32,
- "label": "Another phone number",
- },
- "one_more_phone_number": {
- "required": False,
- "help_text": "",
- "max_length": 32,
- "label": "One more phone number",
- },
- }
-
- form = TestForm()
- self.assertIn("phone_number", form.fields)
- self.assertIn("another_phone_number", form.fields)
- self.assertIn("one_more_phone_number", form.fields)
-
- field = form.fields["another_phone_number"]
- self.assertEqual(field.help_text, "Another phone number help text")
-
- def test_mixin_retains_existing_field_properties(self):
- class TestForm(PhoneNumberMixin, forms.ModelForm):
- class Meta:
- model = UserAddress
- fields = ["country", "phone_number"]
- # Override default label and help text
- labels = {"phone_number": "Special number"}
- help_texts = {"phone_number": "Special help text"}
-
- form = TestForm()
- field = form.fields["phone_number"]
- self.assertEqual(field.label, "Special number")
- self.assertEqual(field.help_text, "Special help text")
-
- @override_settings(OSCAR_REQUIRED_ADDRESS_FIELDS=("phone_number",))
- def test_required_empty_field_raises_validation_error(self):
- class TestForm(PhoneNumberMixin, AbstractAddressForm):
- phone_number_fields = {
- "phone_number": {
- "required": True,
- "help_text": "",
- "max_length": 32,
- "label": "Phone number",
- }
- }
-
- class Meta:
- model = ShippingAddress
- fields = ["country", "phone_number", "postcode"]
-
- CountryFactory(iso_3166_1_a2="GB", is_shipping_country=True)
- form = TestForm(
- data={"phone_number": "", "country": "GB", "postcode": "WW1 2BB"}
- )
- self.assertFalse(form.is_valid())
- self.assertEqual(form.errors["phone_number"], ["This field is required."])
-
- @override_settings(OSCAR_REQUIRED_ADDRESS_FIELDS=[])
- def test_optional_empty_field_validates(self):
- class TestForm(PhoneNumberMixin, AbstractAddressForm):
- phone_number_fields = {
- "phone_number": {
- "required": False,
- "help_text": "",
- "max_length": 32,
- "label": "Phone number",
- }
- }
-
- class Meta:
- model = ShippingAddress
- fields = ["country", "phone_number", "postcode"]
-
- CountryFactory(iso_3166_1_a2="GB", is_shipping_country=True)
- form = TestForm(
- data={"phone_number": "", "country": "GB", "postcode": "WW1 2BB"}
- )
- self.assertTrue(form.is_valid())
-
- @override_settings(OSCAR_REQUIRED_ADDRESS_FIELDS=[])
- def test_invalid_number_fails_validation(self):
- class TestForm(PhoneNumberMixin, AbstractAddressForm):
- phone_number_fields = {
- "phone_number": {
- "required": False,
- "help_text": "",
- "max_length": 32,
- "label": "Phone number",
- }
- }
-
- class Meta:
- model = ShippingAddress
- fields = ["country", "phone_number", "postcode"]
-
- CountryFactory(iso_3166_1_a2="GB", is_shipping_country=True)
- form = TestForm(
- data={"phone_number": "123456", "country": "GB", "postcode": "WW1 2BB"}
- )
- self.assertFalse(form.is_valid())
- self.assertEqual(
- form.errors["phone_number"],
- ["This is not a valid local phone format for UNITED KINGDOM."],
- )
-
- @override_settings(OSCAR_REQUIRED_ADDRESS_FIELDS=[])
- def test_valid_number_passes_validation(self):
- class TestForm(PhoneNumberMixin, AbstractAddressForm):
- phone_number_fields = {
- "phone_number": {
- "required": False,
- "help_text": "",
- "max_length": 32,
- "label": "Phone number",
- }
- }
-
- class Meta:
- model = ShippingAddress
- fields = ["country", "phone_number", "postcode"]
-
- CountryFactory(iso_3166_1_a2="GB", is_shipping_country=True)
- form = TestForm(
- data={"phone_number": "02089001234", "country": "GB", "postcode": "WW1 2BB"}
- )
- self.assertTrue(form.is_valid())
|