Merge SuperFactories into Factories, overriding _create
This commit is contained in:
parent
e06025366a
commit
40557a5494
@ -1,14 +1,14 @@
|
|||||||
from atst.domain.environments import Environments
|
from atst.domain.environments import Environments
|
||||||
from atst.domain.environment_roles import EnvironmentRoles
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
|
|
||||||
from tests.factories import UserFactory, SuperWorkspaceFactory
|
from tests.factories import UserFactory, WorkspaceFactory
|
||||||
|
|
||||||
|
|
||||||
def test_update_environment_roles():
|
def test_update_environment_roles():
|
||||||
owner = UserFactory.create()
|
owner = UserFactory.create()
|
||||||
developer = UserFactory.from_atat_role("developer")
|
developer = UserFactory.from_atat_role("developer")
|
||||||
|
|
||||||
workspace = SuperWorkspaceFactory.create(
|
workspace = WorkspaceFactory.create(
|
||||||
owner=owner,
|
owner=owner,
|
||||||
members=[{"user": developer, "role_name": "developer"}],
|
members=[{"user": developer, "role_name": "developer"}],
|
||||||
projects=[
|
projects=[
|
||||||
@ -47,7 +47,7 @@ def test_update_environment_roles():
|
|||||||
|
|
||||||
def test_get_scoped_environments(db):
|
def test_get_scoped_environments(db):
|
||||||
developer = UserFactory.create()
|
developer = UserFactory.create()
|
||||||
workspace = SuperWorkspaceFactory.create(
|
workspace = WorkspaceFactory.create(
|
||||||
members=[{"user": developer, "role_name": "developer"}],
|
members=[{"user": developer, "role_name": "developer"}],
|
||||||
projects=[
|
projects=[
|
||||||
{
|
{
|
||||||
|
@ -224,10 +224,38 @@ class WorkspaceFactory(Base):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Workspace
|
model = Workspace
|
||||||
|
|
||||||
request = factory.SubFactory(RequestFactory)
|
request = factory.SubFactory(RequestFactory, with_task_order=True)
|
||||||
# name it the same as the request ID by default
|
# name it the same as the request ID by default
|
||||||
name = factory.LazyAttribute(lambda w: w.request.id)
|
name = factory.LazyAttribute(lambda w: w.request.id)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _create(cls, model_class, *args, **kwargs):
|
||||||
|
with_projects = kwargs.pop("projects", [])
|
||||||
|
owner = kwargs.pop("owner", None)
|
||||||
|
members = kwargs.pop("members", [])
|
||||||
|
|
||||||
|
workspace = super()._create(model_class, *args, **kwargs)
|
||||||
|
|
||||||
|
projects = [
|
||||||
|
ProjectFactory.create(workspace=workspace, **p) for p in with_projects
|
||||||
|
]
|
||||||
|
|
||||||
|
if owner:
|
||||||
|
workspace.request.creator = owner
|
||||||
|
WorkspaceRoleFactory.create(
|
||||||
|
workspace=workspace, role=Roles.get("owner"), user=owner
|
||||||
|
)
|
||||||
|
|
||||||
|
for member in members:
|
||||||
|
user = member.get("user", UserFactory.create())
|
||||||
|
role_name = member["role_name"]
|
||||||
|
WorkspaceRoleFactory.create(
|
||||||
|
workspace=workspace, role=Roles.get(role_name), user=user
|
||||||
|
)
|
||||||
|
|
||||||
|
workspace.projects = projects
|
||||||
|
return workspace
|
||||||
|
|
||||||
|
|
||||||
class ProjectFactory(Base):
|
class ProjectFactory(Base):
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -237,11 +265,37 @@ class ProjectFactory(Base):
|
|||||||
name = factory.Faker("name")
|
name = factory.Faker("name")
|
||||||
description = "A test project"
|
description = "A test project"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _create(cls, model_class, *args, **kwargs):
|
||||||
|
with_environments = kwargs.pop("environments", [])
|
||||||
|
project = super()._create(model_class, *args, **kwargs)
|
||||||
|
|
||||||
|
environments = [
|
||||||
|
EnvironmentFactory.create(project=project, **e) for e in with_environments
|
||||||
|
]
|
||||||
|
|
||||||
|
project.environments = environments
|
||||||
|
return project
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentFactory(Base):
|
class EnvironmentFactory(Base):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Environment
|
model = Environment
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _create(cls, model_class, *args, **kwargs):
|
||||||
|
with_members = kwargs.pop("members", [])
|
||||||
|
environment = super()._create(model_class, *args, **kwargs)
|
||||||
|
|
||||||
|
for member in with_members:
|
||||||
|
user = member.get("user", UserFactory.create())
|
||||||
|
role_name = member["role_name"]
|
||||||
|
EnvironmentRoleFactory.create(
|
||||||
|
environment=environment, role=role_name, user=user
|
||||||
|
)
|
||||||
|
|
||||||
|
return environment
|
||||||
|
|
||||||
|
|
||||||
class WorkspaceRoleFactory(Base):
|
class WorkspaceRoleFactory(Base):
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -259,66 +313,3 @@ class EnvironmentRoleFactory(Base):
|
|||||||
environment = factory.SubFactory(EnvironmentFactory)
|
environment = factory.SubFactory(EnvironmentFactory)
|
||||||
role = factory.Faker("name")
|
role = factory.Faker("name")
|
||||||
user = factory.SubFactory(UserFactory)
|
user = factory.SubFactory(UserFactory)
|
||||||
|
|
||||||
|
|
||||||
class SuperEnvironmentFactory(EnvironmentFactory):
|
|
||||||
@classmethod
|
|
||||||
def create(cls, *args, **kwargs):
|
|
||||||
with_members = kwargs.pop("members", [])
|
|
||||||
environment = super().create(*args, **kwargs)
|
|
||||||
|
|
||||||
for member in with_members:
|
|
||||||
user = member.get("user", UserFactory.create())
|
|
||||||
role_name = member["role_name"]
|
|
||||||
EnvironmentRoleFactory.create(
|
|
||||||
environment=environment, role=role_name, user=user
|
|
||||||
)
|
|
||||||
|
|
||||||
return environment
|
|
||||||
|
|
||||||
|
|
||||||
class SuperProjectFactory(ProjectFactory):
|
|
||||||
@classmethod
|
|
||||||
def create(cls, *args, **kwargs):
|
|
||||||
with_environments = kwargs.pop("environments", [])
|
|
||||||
project = super().create(*args, **kwargs)
|
|
||||||
|
|
||||||
environments = [
|
|
||||||
SuperEnvironmentFactory.create(project=project, **e) for e in with_environments
|
|
||||||
]
|
|
||||||
|
|
||||||
project.environments = environments
|
|
||||||
return project
|
|
||||||
|
|
||||||
|
|
||||||
class SuperWorkspaceFactory(WorkspaceFactory):
|
|
||||||
class Meta:
|
|
||||||
pass
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def create(cls, *args, **kwargs):
|
|
||||||
with_projects = kwargs.pop("projects", [])
|
|
||||||
owner = kwargs.pop("owner", None)
|
|
||||||
members = kwargs.pop("members", [])
|
|
||||||
|
|
||||||
workspace = super().create(*args, **kwargs)
|
|
||||||
|
|
||||||
projects = [
|
|
||||||
SuperProjectFactory.create(workspace=workspace, **p) for p in with_projects
|
|
||||||
]
|
|
||||||
|
|
||||||
if owner:
|
|
||||||
workspace.request.creator = owner
|
|
||||||
WorkspaceRoleFactory.create(
|
|
||||||
workspace=workspace, role=Roles.get("owner"), user=owner
|
|
||||||
)
|
|
||||||
|
|
||||||
for member in members:
|
|
||||||
user = member.get("user", UserFactory.create())
|
|
||||||
role_name = member["role_name"]
|
|
||||||
WorkspaceRoleFactory.create(
|
|
||||||
workspace=workspace, role=Roles.get(role_name), user=user
|
|
||||||
)
|
|
||||||
|
|
||||||
workspace.projects = projects
|
|
||||||
return workspace
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user