diff --git a/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py b/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py new file mode 100644 index 00000000..aef41c19 --- /dev/null +++ b/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py @@ -0,0 +1,28 @@ +"""add workspace_role workspace_id fk + +Revision ID: f36f130622b9 +Revises: f064247f2988 +Create Date: 2018-08-20 10:36:23.920881 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'f36f130622b9' +down_revision = 'f064247f2988' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_foreign_key('workspace_role_workspace_id_fk', 'workspace_role', 'workspaces', ['workspace_id'], ['id']) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint('workspace_role_workspace_id_fk', 'workspace_role', type_='foreignkey') + # ### end Alembic commands ### diff --git a/atst/domain/workspaces.py b/atst/domain/workspaces.py index c910671f..3997ab9f 100644 --- a/atst/domain/workspaces.py +++ b/atst/domain/workspaces.py @@ -18,7 +18,7 @@ class Workspaces(object): workspace = Workspace(request=request, name=name) role = Roles.get("owner") - workspace_role = WorkspaceRole(user_id=request.creator.id, role=role, workspace_id=workspace.id) + workspace_role = WorkspaceRole(user=request.creator, role=role, workspace=workspace) db.session.add(workspace) db.session.add(workspace_role) diff --git a/atst/models/workspace_role.py b/atst/models/workspace_role.py index 86970e0b..cb008bd3 100644 --- a/atst/models/workspace_role.py +++ b/atst/models/workspace_role.py @@ -10,11 +10,14 @@ class WorkspaceRole(Base): __tablename__ = "workspace_role" id = Id() - workspace_id = Column(UUID(as_uuid=True), index=True) + workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True) + workspace = relationship("Workspace") + role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id")) - user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), index=True) role = relationship("Role") + user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), index=True) + Index( "workspace_role_user_workspace", diff --git a/tests/domain/test_workspace_users.py b/tests/domain/test_workspace_users.py index 2c651235..be24796b 100644 --- a/tests/domain/test_workspace_users.py +++ b/tests/domain/test_workspace_users.py @@ -1,32 +1,30 @@ -from uuid import uuid4 - from atst.domain.workspace_users import WorkspaceUsers from atst.domain.users import Users +from tests.factories import WorkspaceFactory def test_can_create_new_workspace_user(): - workspace_id = uuid4() - user = Users.create("developer") + workspace = WorkspaceFactory.create() + new_user = Users.create("developer") - workspace_user_dicts = [{"id": user.id, "workspace_role": "owner"}] + workspace_user_dicts = [{"id": new_user.id, "workspace_role": "owner"}] + workspace_users = WorkspaceUsers.add_many(workspace.id, workspace_user_dicts) - workspace_users = WorkspaceUsers.add_many(workspace_id, workspace_user_dicts) - - assert workspace_users[0].user.id == user.id + assert workspace_users[0].user.id == new_user.id assert workspace_users[0].user.atat_role.name == "developer" assert workspace_users[0].workspace_role.role.name == "owner" def test_can_update_existing_workspace_user(): - workspace_id = uuid4() - user = Users.create("developer") + workspace = WorkspaceFactory.create() + new_user = Users.create("developer") WorkspaceUsers.add_many( - workspace_id, [{"id": user.id, "workspace_role": "owner"}] + workspace.id, [{"id": new_user.id, "workspace_role": "owner"}] ) workspace_users = WorkspaceUsers.add_many( - workspace_id, [{"id": user.id, "workspace_role": "developer"}] + workspace.id, [{"id": new_user.id, "workspace_role": "developer"}] ) - assert workspace_users[0].user.id == user.id + assert workspace_users[0].user.id == new_user.id assert workspace_users[0].workspace_role.role.name == "developer"