Skip to content

Commit

Permalink
Add fr_CA address provider (#1767)
Browse files Browse the repository at this point in the history
  • Loading branch information
davebulaval authored Jan 17, 2023
1 parent 3487082 commit d895624
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 3 deletions.
8 changes: 5 additions & 3 deletions faker/providers/address/en_CA/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from typing import Optional

from faker.providers import ElementsType

from ..en import Provider as AddressProvider


Expand Down Expand Up @@ -33,9 +35,9 @@ class Provider(AddressProvider):
"Y",
)

city_prefixes = ("North", "East", "West", "South", "New", "Lake", "Port")
city_prefixes: ElementsType[str] = ("North", "East", "West", "South", "New", "Lake", "Port")

city_suffixes = (
city_suffixes: ElementsType[str] = (
"town",
"ton",
"land",
Expand Down Expand Up @@ -337,7 +339,7 @@ class Provider(AddressProvider):
"YT": ["Y"],
}

city_formats = (
city_formats: ElementsType[str] = (
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{first_name}}{{city_suffix}}",
Expand Down
81 changes: 81 additions & 0 deletions faker/providers/address/fr_CA/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
from typing import Any

from ..en_CA import Provider as EnCaProvider


class Provider(EnCaProvider):
# Most of the parts are identical to en_CA, we simply override those who are not shared between the two.

city_prefixes = (
"Ville",
"Baie",
"Saint-",
"Sainte-",
"Mont-",
"La",
"Lac-",
"L'",
"L'Île-",
)

city_suffixes = (
"Est",
"Ouest",
"-sur-Mer",
)

street_prefixes = (
"rue",
"rue",
"chemin",
"avenue",
"boulevard",
"route",
"rang",
"allé",
"montée",
)

provinces = (
"Alberta",
"Colombie-Britannique",
"Manitoba",
"Nouveau-Brunswick",
"Terre-Neuve-et-Labrador",
"Territoires du Nord-Ouest",
"Nouvelle-Écosse",
"Nunavut",
"Ontario",
"Île-du-Prince-Édouard",
"Québec",
"Saskatchewan",
"Yukon",
)

street_name_formats = (
"{{street_prefix}} {{first_name}}",
"{{street_prefix}} {{last_name}}",
)

city_formats = (
"{{city_prefix}} {{last_name}}",
"{{city_prefix}} {{last_name}}",
"{{city_prefix}}-{{city_prefix}}-{{last_name}}",
"{{city_prefix}} {{first_name}} {{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{city_prefix}} {{first_name}}",
"{{city_prefix}} {{first_name}}",
"{{last_name}}",
"{{last_name}}",
"{{first_name}} {{city_suffix}}",
"{{last_name}} {{city_suffix}}",
)

def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)

def street_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.street_prefixes)
41 changes: 41 additions & 0 deletions tests/providers/test_address.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from faker.providers.address.es_MX import Provider as EsMxAddressProvider
from faker.providers.address.fa_IR import Provider as FaIrAddressProvider
from faker.providers.address.fi_FI import Provider as FiFiAddressProvider
from faker.providers.address.fr_CA import Provider as FrCaAddressProvider
from faker.providers.address.fr_CH import Provider as FrChAddressProvider
from faker.providers.address.fr_FR import Provider as FrFrAddressProvider
from faker.providers.address.he_IL import Provider as HeIlAddressProvider
Expand Down Expand Up @@ -2222,6 +2223,46 @@ def test_region(self, faker, num_samples):
assert region in UkUaAddressProvider.region_names


class TestFrCa:
"""Test fr_CA address provider methods"""

def test_province(self, faker, num_samples):
for _ in range(num_samples):
province = faker.province()
assert isinstance(province, str)
assert province in FrCaAddressProvider.provinces

def test_province_abbr(self, faker, num_samples):
for _ in range(num_samples):
province_abbr = faker.province_abbr()
assert isinstance(province_abbr, str)
assert province_abbr in FrCaAddressProvider.provinces_abbr

def test_city_prefixes(self, faker, num_samples):
for _ in range(num_samples):
city_prefix = faker.city_prefix()
assert isinstance(city_prefix, str)
assert city_prefix in FrCaAddressProvider.city_prefixes

def test_city_suffixes(self, faker, num_samples):
for _ in range(num_samples):
city_suffixes = faker.city_suffix()
assert isinstance(city_suffixes, str)
assert city_suffixes in FrCaAddressProvider.city_suffixes

def test_street_prefixes(self, faker, num_samples):
for _ in range(num_samples):
street_prefix = faker.street_prefix()
assert isinstance(street_prefix, str)
assert street_prefix in FrCaAddressProvider.street_prefixes

def test_administrative_unit(self, faker, num_samples):
for _ in range(num_samples):
province = faker.administrative_unit()
assert isinstance(province, str)
assert province in FrCaAddressProvider.provinces


class TestPlPl:
"""Test pl_PL address provider methods"""

Expand Down

0 comments on commit d895624

Please sign in to comment.