def test_only_accepts_british_local_phone_number(self): data = self.minimal_data.copy() data['phone_number'] = '07 914721389' # local UK number self.assertTrue(ShippingAddressForm(data).is_valid()) data['phone_number'] = '0176 968 426 71' # local German number self.assertFalse(ShippingAddressForm(data).is_valid())
def test_needs_country_data(self): CountryFactory(iso_3166_1_a2='DE', is_shipping_country=True) self.assertFalse(ShippingAddressForm(self.minimal_data).is_valid()) data = self.minimal_data.copy() data['country'] = Country.objects.get(iso_3166_1_a2='GB').pk self.assertTrue(ShippingAddressForm(data).is_valid())
def test_local_phone_number_invalid_without_country(self): # Add another country, so we have two. CountryFactory(iso_3166_1_a2='DE', is_shipping_country=True) data = self.minimal_data.copy() data['phone_number'] = '07 914721389' # User hasn't selected a country. Because there are multiple country # choices we should not accept the local number. form = ShippingAddressForm(data) self.assertFalse(form.is_valid()) self.assertIn('phone_number', form.errors)
def test_only_accepts_local_phone_number_when_country_matches(self): CountryFactory(iso_3166_1_a2='DE', is_shipping_country=True) data = self.minimal_data.copy() data['phone_number'] = '07 914721389' # local UK number data['country'] = Country.objects.get(iso_3166_1_a2='DE').pk self.assertFalse(ShippingAddressForm(data).is_valid()) data['country'] = Country.objects.get(iso_3166_1_a2='GB').pk self.assertTrue(ShippingAddressForm(data).is_valid())
def test_required_fields_validated(self): form = ShippingAddressForm() self.assertTrue(form.fields['last_name'].required) self.assertTrue(form.fields['postcode'].required) self.assertFalse(form.fields['first_name'].required) self.assertFalse(form.fields['line2'].required) self.assertFalse(form.fields['line3'].required) self.assertFalse(form.fields['line4'].required)
def get_address_fields(): def new_init(self, *args, **kwargs): super(ShippingAddressForm, self).__init__(*args, **kwargs) ShippingAddressForm.__init__ = new_init data = { 'first_name': 'John', 'last_name': 'Doe', 'line1': '1 Egg Road', 'line4': 'Shell City', 'postcode': 'N12 9RT', 'phone_number': '+49231555555', } form = ShippingAddressForm(data) form.is_valid() address_fields = dict( (k, v) for (k, v) in form.instance.__dict__.items() if not k.startswith('_')) return address_fields
def test_is_valid_with_international_phone_number(self): data = self.minimal_data.copy() data['phone_number'] = '+49 176 968426 71' form = ShippingAddressForm(data) self.assertTrue(form.is_valid())
def test_is_valid_without_phone_number(self): self.assertTrue(ShippingAddressForm(self.minimal_data).is_valid())
def test_required_phone_number_validated(self): # This needs a separate test because of the logic in PhoneNumberMixin form = ShippingAddressForm() self.assertTrue(form.fields['phone_number'].required)
def test_keeps_country_field(self): CountryFactory(iso_3166_1_a2='DE', is_shipping_country=True) self.assertTrue('country' in ShippingAddressForm().fields)
def test_removes_country_field(self): self.assertTrue('country' not in ShippingAddressForm().fields)