# coding=utf-8 from django.test import TestCase from oscar.apps.address.models import Country from oscar.apps.checkout.forms import ShippingAddressForm from oscar.test.factories import CountryFactory class TestShippingAddressForm(TestCase): minimal_data = { 'first_name': 'Bärry', 'last_name': 'Chuckle', 'line1': '1 King St', 'line4': 'Gothám', 'postcode': 'N1 7RR' } def setUp(self): CountryFactory(iso_3166_1_a2='GB', is_shipping_country=True) def test_removes_country_field(self): self.assertTrue('country' not in ShippingAddressForm().fields) def test_keeps_country_field(self): CountryFactory(iso_3166_1_a2='DE', is_shipping_country=True) self.assertTrue('country' in ShippingAddressForm().fields) # Tests where the country field is hidden def test_is_valid_without_phone_number(self): self.assertTrue(ShippingAddressForm(self.minimal_data).is_valid()) 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_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()) # Tests where the country field exists 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_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())