"""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')