diff --git a/atst/models/request.py b/atst/models/request.py index d7436355..7a497222 100644 --- a/atst/models/request.py +++ b/atst/models/request.py @@ -37,7 +37,7 @@ class Request(Base): workspace = relationship("Workspace", uselist=False, backref="request") user_id = Column(ForeignKey("users.id"), nullable=False) - creator = relationship("User") + creator = relationship("User", backref="owned_requests") task_order_id = Column(ForeignKey("task_order.id")) task_order = relationship("TaskOrder") diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index cee24c23..796379fd 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -17,7 +17,25 @@ def root(): @bp.route("/home") def home(): - return redirect(url_for("requests.requests_index")) + num_workspaces = len(g.current_user.workspace_roles) + + if num_workspaces == 0: + return redirect(url_for("requests.requests_index")) + elif num_workspaces == 1: + workspace_role = g.current_user.workspace_roles[0] + workspace_id = workspace_role.workspace.id + is_request_owner = workspace_role.role.name == "owner" + + if is_request_owner: + return redirect( + url_for("workspaces.workspace_reports", workspace_id=workspace_id) + ) + else: + return redirect( + url_for("workspaces.workspace_projects", workspace_id=workspace_id) + ) + else: + return redirect(url_for("workspaces.workspaces")) @bp.route("/styleguide") diff --git a/tests/routes/test_home.py b/tests/routes/test_home.py index daa1c7ce..06b05457 100644 --- a/tests/routes/test_home.py +++ b/tests/routes/test_home.py @@ -1,11 +1,11 @@ -from tests.factories import UserFactory, WorkspaceFactory +from tests.factories import UserFactory, WorkspaceFactory, RequestFactory from atst.domain.workspaces import Workspaces def test_user_with_workspaces_has_workspaces_nav(client, user_session): user = UserFactory.create() workspace = WorkspaceFactory.create() - Workspaces._create_workspace_role(user, workspace, "default") + Workspaces._create_workspace_role(user, workspace, "developer") user_session(user) response = client.get("/home", follow_redirects=True) @@ -17,3 +17,70 @@ def test_user_without_workspaces_has_no_workspaces_nav(client, user_session): user_session(user) response = client.get("/home", follow_redirects=True) assert b'href="/workspaces"' not in response.data + + +def test_request_owner_with_no_workspaces_redirected_to_requests(client, user_session): + request = RequestFactory.create() + user_session(request.creator) + response = client.get("/home", follow_redirects=False) + + assert "/requests" in response.location + + +def test_request_owner_with_one_workspace_redirected_to_reports(client, user_session): + request = RequestFactory.create() + workspace = Workspaces.create(request) + + user_session(request.creator) + response = client.get("/home", follow_redirects=False) + + assert "/workspaces/{}/reports".format(workspace.id) in response.location + + +def test_request_owner_with_more_than_one_workspace_redirected_to_workspaces( + client, user_session +): + request_creator = UserFactory.create() + Workspaces.create(RequestFactory.create(creator=request_creator)) + Workspaces.create(RequestFactory.create(creator=request_creator)) + + user_session(request_creator) + response = client.get("/home", follow_redirects=False) + + assert "/workspaces" in response.location + + +def test_non_owner_user_with_no_workspaces_redirected_to_requests(client, user_session): + user = UserFactory.create() + + user_session(user) + response = client.get("/home", follow_redirects=False) + + assert "/requests" in response.location + + +def test_non_owner_user_with_one_workspace_redirected_to_workspace_projects( + client, user_session +): + user = UserFactory.create() + workspace = WorkspaceFactory.create() + Workspaces._create_workspace_role(user, workspace, "developer") + + user_session(user) + response = client.get("/home", follow_redirects=False) + + assert "/workspaces/{}/projects".format(workspace.id) in response.location + + +def test_non_owner_user_with_mulitple_workspaces_redirected_to_workspaces( + client, user_session +): + user = UserFactory.create() + for _ in range(3): + workspace = WorkspaceFactory.create() + Workspaces._create_workspace_role(user, workspace, "developer") + + user_session(user) + response = client.get("/home", follow_redirects=False) + + assert "/workspaces" in response.location