41 lines
1.4 KiB
Python
41 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')
|