Source code for tests.users.factories
# type: ignore
from datetime import date, timedelta
import factory
from django.utils.timezone import now
from factory import LazyAttribute, Maybe, Sequence, SubFactory
from factory.django import DjangoModelFactory
from faker import Faker
from apps.users.models import ActivationCode, Category, Profile, User
from common.utils.uid import encode_uid
from core.settings import USERS_CONFIGS
fake = Faker()
[docs]
class CategoryFactory(DjangoModelFactory):
class Meta:
model = Category
name = factory.LazyAttribute(lambda x: fake.word().capitalize())
[docs]
class UserFactory(DjangoModelFactory):
class Meta:
model = User
email = factory.LazyAttribute(lambda x: fake.unique.email())
username = factory.LazyAttribute(lambda x: fake.unique.user_name())
password = factory.PostGenerationMethodCall("set_password", "testpassword")
is_active = True
[docs]
class ProfileFactory(DjangoModelFactory):
class Meta:
model = Profile
user: User = factory.SubFactory(UserFactory)
avatar = factory.django.ImageField(color="blue")
birthdate = factory.LazyAttribute(
lambda o: date.today() - timedelta(days=(USERS_CONFIGS["AGE_LIMIT"] + 1) * 365.25)
)
[docs]
class ActivationCodeFactory(DjangoModelFactory):
class Meta:
model = ActivationCode
user = SubFactory(UserFactory)
uid = LazyAttribute(lambda o: encode_uid(o.user.pk))
email = Maybe("include_email", LazyAttribute(lambda x: x.user.email), "")
code = Sequence(lambda n: f"code{n}")
expiration_date = LazyAttribute(lambda _: now() + timedelta(days=1))