import factory from uuid import uuid4 from django.utils import timezone from plane.db.models import User, Workspace, WorkspaceMember, Project, ProjectMember class UserFactory(factory.django.DjangoModelFactory): """Factory for creating User instances""" class Meta: model = User django_get_or_create = ("email",) id = factory.LazyFunction(uuid4) email = factory.Sequence(lambda n: f"user{n}@plane.so") password = factory.PostGenerationMethodCall("set_password", "password") first_name = factory.Sequence(lambda n: f"First{n}") last_name = factory.Sequence(lambda n: f"Last{n}") is_active = True is_superuser = False is_staff = False class WorkspaceFactory(factory.django.DjangoModelFactory): """Factory for creating Workspace instances""" class Meta: model = Workspace django_get_or_create = ("slug",) id = factory.LazyFunction(uuid4) name = factory.Sequence(lambda n: f"Workspace {n}") slug = factory.Sequence(lambda n: f"workspace-{n}") owner = factory.SubFactory(UserFactory) created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now) class WorkspaceMemberFactory(factory.django.DjangoModelFactory): """Factory for creating WorkspaceMember instances""" class Meta: model = WorkspaceMember id = factory.LazyFunction(uuid4) workspace = factory.SubFactory(WorkspaceFactory) member = factory.SubFactory(UserFactory) role = 20 # Admin role by default created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now) class ProjectFactory(factory.django.DjangoModelFactory): """Factory for creating Project instances""" class Meta: model = Project django_get_or_create = ("name", "workspace") id = factory.LazyFunction(uuid4) name = factory.Sequence(lambda n: f"Project {n}") workspace = factory.SubFactory(WorkspaceFactory) created_by = factory.SelfAttribute("workspace.owner") updated_by = factory.SelfAttribute("workspace.owner") created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now) class ProjectMemberFactory(factory.django.DjangoModelFactory): """Factory for creating ProjectMember instances""" class Meta: model = ProjectMember id = factory.LazyFunction(uuid4) project = factory.SubFactory(ProjectFactory) member = factory.SubFactory(UserFactory) role = 20 # Admin role by default created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now)