/home redirects depending on requests and workspaces

This commit is contained in:
richard-dds 2018-09-17 13:28:35 -04:00
parent 6facf746e2
commit e087c51045
3 changed files with 89 additions and 4 deletions

View File

@ -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")

View File

@ -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")

View File

@ -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