Merge pull request #293 from dod-ccpo/homepage-redirects
Redirect from /home depending on requests and workspaces
This commit is contained in:
commit
3baa7b2016
@ -37,7 +37,7 @@ class Request(Base):
|
|||||||
workspace = relationship("Workspace", uselist=False, backref="request")
|
workspace = relationship("Workspace", uselist=False, backref="request")
|
||||||
|
|
||||||
user_id = Column(ForeignKey("users.id"), nullable=False)
|
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_id = Column(ForeignKey("task_order.id"))
|
||||||
task_order = relationship("TaskOrder")
|
task_order = relationship("TaskOrder")
|
||||||
|
@ -17,7 +17,25 @@ def root():
|
|||||||
|
|
||||||
@bp.route("/home")
|
@bp.route("/home")
|
||||||
def 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")
|
@bp.route("/styleguide")
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from tests.factories import UserFactory, WorkspaceFactory
|
from tests.factories import UserFactory, WorkspaceFactory, RequestFactory
|
||||||
from atst.domain.workspaces import Workspaces
|
from atst.domain.workspaces import Workspaces
|
||||||
|
|
||||||
|
|
||||||
def test_user_with_workspaces_has_workspaces_nav(client, user_session):
|
def test_user_with_workspaces_has_workspaces_nav(client, user_session):
|
||||||
user = UserFactory.create()
|
user = UserFactory.create()
|
||||||
workspace = WorkspaceFactory.create()
|
workspace = WorkspaceFactory.create()
|
||||||
Workspaces._create_workspace_role(user, workspace, "default")
|
Workspaces._create_workspace_role(user, workspace, "developer")
|
||||||
|
|
||||||
user_session(user)
|
user_session(user)
|
||||||
response = client.get("/home", follow_redirects=True)
|
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)
|
user_session(user)
|
||||||
response = client.get("/home", follow_redirects=True)
|
response = client.get("/home", follow_redirects=True)
|
||||||
assert b'href="/workspaces"' not in response.data
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user