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)