40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
"""Factory to create `Address` instances."""
|
|
|
|
import random
|
|
import string
|
|
|
|
import factory
|
|
from factory import alchemy
|
|
|
|
from tests.db.fake_data.factories import utils
|
|
from urban_meal_delivery import db
|
|
|
|
|
|
class AddressFactory(alchemy.SQLAlchemyModelFactory):
|
|
"""Create instances of the `db.Address` model."""
|
|
|
|
class Meta:
|
|
model = db.Address
|
|
sqlalchemy_get_or_create = ('id',)
|
|
|
|
id = factory.Sequence(lambda num: num) # noqa:WPS125
|
|
created_at = factory.LazyFunction(utils.early_in_the_morning)
|
|
|
|
# When testing, all addresses are considered primary ones.
|
|
# As non-primary addresses have no different behavior and
|
|
# the property is only kept from the original dataset for
|
|
# completeness sake, that is ok to do.
|
|
primary_id = factory.LazyAttribute(lambda obj: obj.id)
|
|
|
|
# Mimic a Google Maps Place ID with just random characters.
|
|
place_id = factory.LazyFunction(
|
|
lambda: ''.join(random.choice(string.ascii_lowercase) for _ in range(20)),
|
|
)
|
|
|
|
# Place the addresses somewhere in downtown Paris.
|
|
latitude = factory.Faker('coordinate', center=48.855, radius=0.01)
|
|
longitude = factory.Faker('coordinate', center=2.34, radius=0.03)
|
|
# city -> set by the `make_address` fixture as there is only one `city`
|
|
city_name = 'Paris'
|
|
zip_code = factory.LazyFunction(lambda: random.randint(75001, 75020))
|
|
street = factory.Faker('street_address', locale='fr_FR')
|