From e087c5104565adecf8f3605d5bea139721b3e63b Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 13:28:35 -0400 Subject: [PATCH 1/5] /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 From 474e9154021bb4febb8f5a2ee3bc7557bd5f6944 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 15:16:57 -0400 Subject: [PATCH 2/5] Ensure user has owner role on workspace --- atst/routes/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index bc15e0cb..b3538354 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -23,7 +23,10 @@ def home(): 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 + 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) From 72c82161d7adf4b22d2aa4d5094a133bd1077b2c Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 15:20:17 -0400 Subject: [PATCH 3/5] Rename some tests for clarity --- tests/routes/test_home.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/routes/test_home.py b/tests/routes/test_home.py index d58bf7df..c455eb01 100644 --- a/tests/routes/test_home.py +++ b/tests/routes/test_home.py @@ -19,7 +19,7 @@ def test_user_without_workspaces_has_no_workspaces_nav(client, user_session): assert b'href="/workspaces"' not in response.data -def test_request_owner_with_no_workspaces_redirected_to_requests_page( +def test_request_owner_with_no_workspaces_redirected_to_requests( client, user_session ): request = RequestFactory.create() @@ -29,7 +29,7 @@ def test_request_owner_with_no_workspaces_redirected_to_requests_page( assert "/requests" in response.location -def test_request_owner_with_one_workspace_redirected_to_report(client, user_session): +def test_request_owner_with_one_workspace_redirected_to_reports(client, user_session): request = RequestFactory.create() workspace = Workspaces.create(request) @@ -39,7 +39,7 @@ def test_request_owner_with_one_workspace_redirected_to_report(client, user_sess assert "/workspaces/{}/reports".format(workspace.id) in response.location -def test_request_owner_with_more_than_one_workspace_redirected_to_report( +def test_request_owner_with_more_than_one_workspace_redirected_to_workspaces( client, user_session ): request_creator = UserFactory.create() From 9aa69a5ec042e0b75e280215c00d8030acebf7d6 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 16:18:44 -0400 Subject: [PATCH 4/5] Remove redundant flag --- atst/routes/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/atst/routes/__init__.py b/atst/routes/__init__.py index b3538354..796379fd 100644 --- a/atst/routes/__init__.py +++ b/atst/routes/__init__.py @@ -17,7 +17,6 @@ def root(): @bp.route("/home") def home(): - is_request_owner = bool(g.current_user.owned_requests) num_workspaces = len(g.current_user.workspace_roles) if num_workspaces == 0: From 0e2ec93c84d2e7ed4b0ed1820aee0f993a8b7eba Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 17 Sep 2018 16:40:01 -0400 Subject: [PATCH 5/5] Formatting --- tests/routes/test_home.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/routes/test_home.py b/tests/routes/test_home.py index c455eb01..06b05457 100644 --- a/tests/routes/test_home.py +++ b/tests/routes/test_home.py @@ -19,9 +19,7 @@ def test_user_without_workspaces_has_no_workspaces_nav(client, user_session): assert b'href="/workspaces"' not in response.data -def test_request_owner_with_no_workspaces_redirected_to_requests( - client, user_session -): +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)