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