from typing import Any, Sequence from django.contrib.auth import get_user_model from ctrack.organisations.models import Organisation, Address, AddressType from factory import DjangoModelFactory, Faker, post_generation, SubFactory class AddressTypeFactory(DjangoModelFactory): descriptor = "Primary Address" class Meta: model = AddressType class OrganisationFactory(DjangoModelFactory): name = Faker("company", locale="en_GB") class Meta: model = Organisation class AddressFactory(DjangoModelFactory): type = SubFactory(AddressTypeFactory) organisation = SubFactory(OrganisationFactory) line1 = Faker("secondary_address", locale="en_GB") line2 = Faker("street_name", locale="en_GB") line3 = Faker("secondary_address", locale="en_GB") city = Faker("city", locale="en_GB") county = Faker("lexify", locale="en_GB", text="??????", letters="aeioutzyj") postcode = Faker("postcode", locale="en_GB") country = Faker("country") other_details = Faker("lexify", locale="en_GB", text="??????", letters="aeioutzyj") class Meta: model = Address class UserFactory(DjangoModelFactory): username = Faker("user_name") email = Faker("email") name = Faker("name") @post_generation def password(self, create: bool, extracted: Sequence[Any], **kwargs): password = Faker( "password", length=42, special_chars=True, digits=True, upper_case=True, lower_case=True, ).generate(extra_kwargs={}) self.set_password(password) class Meta: model = get_user_model() django_get_or_create = ["username"]