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