diff --git a/faker/providers/address/fr_FR/__init__.py b/faker/providers/address/fr_FR/__init__.py index fa7010dacc..1125716eb8 100644 --- a/faker/providers/address/fr_FR/__init__.py +++ b/faker/providers/address/fr_FR/__init__.py @@ -46,7 +46,6 @@ class Provider(AddressProvider): address_formats = ("{{street_address}}\n{{postcode}} {{city}}",) building_number_formats = ("%", "%#", "%#", "%#", "%##") - postcode_formats = ("#####",) countries = ( "Afghanistan", "Afrique du sud", @@ -467,3 +466,13 @@ def department_number(self) -> str: :example: '59' """ return self.department()[0] + + def postcode(self) -> str: + """ + Randomly returns a postcode generated from existing french depertment number. + exemple: '33260' + """ + department = self.department_number() + if department in ["2A", "2B"]: + department = "20" + return f"{department}{self.random_number(digits=5 - len(department))}" diff --git a/tests/providers/test_address.py b/tests/providers/test_address.py index 0a0e2cbb7d..0e5c47ef09 100644 --- a/tests/providers/test_address.py +++ b/tests/providers/test_address.py @@ -865,6 +865,17 @@ def test_department_number(self, faker, num_samples): assert isinstance(department_number, str) assert department_number in department_numbers + def test_postcode(self, faker, num_samples): + department_numbers = [dept_num for dept_num, dept_name in FrFrAddressProvider.departments] + for _ in range(num_samples): + postcode = faker.postcode() + assert isinstance(postcode, str) + assert ( + postcode[:3] in department_numbers # for 3 digits deparments number + or postcode[:2] == "20" # for Corsica : "2A" or "2B" + or postcode[:2] in department_numbers # any other + ) + class TestHeIl: """Test he_IL address provider methods"""