Merge pull request #705 from dod-ccpo/so-redirect

Have officer invite url point to the TO view page
This commit is contained in:
leigh-mil 2019-03-15 10:36:57 -04:00 committed by GitHub
commit f24710f263
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 9 deletions

View File

@ -221,6 +221,14 @@ class TaskOrder(Base, mixins.TimestampsMixin):
"""
return self.so_invite and not self.security_officer
@property
def officers(self):
return [
self.contracting_officer,
self.contracting_officer_representative,
self.security_officer,
]
_OFFICER_PREFIXES = {
"contracting_officer": "ko",
"contracting_officer_representative": "cor",

View File

@ -26,7 +26,7 @@ def accept_invitation(token):
# - the logged-in user has multiple roles on the TO (e.g., KO and COR)
# - the logged-in user has officer roles on multiple unsigned TOs
for task_order in invite.portfolio.task_orders:
if g.current_user == task_order.contracting_officer:
if g.current_user in task_order.officers:
return redirect(
url_for(
"portfolios.view_task_order",
@ -34,14 +34,6 @@ def accept_invitation(token):
task_order_id=task_order.id,
)
)
elif g.current_user == task_order.contracting_officer_representative:
return redirect(
url_for("task_orders.new", screen=4, task_order_id=task_order.id)
)
elif g.current_user == task_order.security_officer:
return redirect(
url_for("task_orders.new", screen=4, task_order_id=task_order.id)
)
return redirect(
url_for("portfolios.show_portfolio", portfolio_id=invite.portfolio.id)

View File

@ -245,3 +245,77 @@ def test_contracting_officer_accepts_invite(monkeypatch, client, user_session):
_external=True,
)
assert response.headers["Location"] == to_review_url
def test_cor_accepts_invite(monkeypatch, client, user_session):
portfolio = PortfolioFactory.create()
user_info = UserFactory.dictionary()
task_order = TaskOrderFactory.create(
portfolio=portfolio,
cor_first_name=user_info["first_name"],
cor_last_name=user_info["last_name"],
cor_email=user_info["email"],
cor_phone_number=user_info["phone_number"],
cor_dod_id=user_info["dod_id"],
cor_invite=True,
)
# create contracting officer representative
user_session(portfolio.owner)
client.post(url_for("task_orders.invite", task_order_id=task_order.id))
# contracting officer representative accepts invitation
user = Users.get_by_dod_id(user_info["dod_id"])
token = user.invitations[0].token
monkeypatch.setattr(
"atst.domain.auth.should_redirect_to_user_profile", lambda *args: False
)
user_session(user)
response = client.get(url_for("portfolios.accept_invitation", token=token))
# user is redirected to the task order review page
assert response.status_code == 302
to_review_url = url_for(
"portfolios.view_task_order",
portfolio_id=task_order.portfolio_id,
task_order_id=task_order.id,
_external=True,
)
assert response.headers["Location"] == to_review_url
def test_so_accepts_invite(monkeypatch, client, user_session):
portfolio = PortfolioFactory.create()
user_info = UserFactory.dictionary()
task_order = TaskOrderFactory.create(
portfolio=portfolio,
so_first_name=user_info["first_name"],
so_last_name=user_info["last_name"],
so_email=user_info["email"],
so_phone_number=user_info["phone_number"],
so_dod_id=user_info["dod_id"],
so_invite=True,
)
# create security officer
user_session(portfolio.owner)
client.post(url_for("task_orders.invite", task_order_id=task_order.id))
# security officer accepts invitation
user = Users.get_by_dod_id(user_info["dod_id"])
token = user.invitations[0].token
monkeypatch.setattr(
"atst.domain.auth.should_redirect_to_user_profile", lambda *args: False
)
user_session(user)
response = client.get(url_for("portfolios.accept_invitation", token=token))
# user is redirected to the task order review page
assert response.status_code == 302
to_review_url = url_for(
"portfolios.view_task_order",
portfolio_id=task_order.portfolio_id,
task_order_id=task_order.id,
_external=True,
)
assert response.headers["Location"] == to_review_url