From e087c5104565adecf8f3605d5bea139721b3e63b Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 13:28:35 -0400 Subject: [PATCH] /home redirects depending on requests and workspaces --- atst/models/request.py | 2 +- atst/routes/__init__.py | 18 +++++++++- tests/routes/test_home.py | 73 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/atst/models/request.py b/atst/models/request.py index de374907..f324a541 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..bc15e0cb 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -17,7 +17,23 @@ def root(): @bp.route("/home") def home(): - return redirect(url_for("requests.requests_index")) + is_request_owner = bool(g.current_user.owned_requests) + num_workspaces = len(g.current_user.workspace_roles) + + if num_workspaces == 0: + return redirect(url_for("requests.requests_index")) + elif num_workspaces == 1: + workspace_id = g.current_user.workspace_roles[0].workspace_id + 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..d58bf7df 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,72 @@ 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_page( + 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_report(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_report( + 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