From 679ec187a58d450965789d3d8603433a4a0c3d75 Mon Sep 17 00:00:00 2001 From: George Drummond Date: Thu, 7 Mar 2019 11:19:03 -0500 Subject: [PATCH] You can only resend an invite for a pending invite --- atst/routes/portfolios/task_orders.py | 3 +- tests/routes/portfolios/test_task_orders.py | 37 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/atst/routes/portfolios/task_orders.py b/atst/routes/portfolios/task_orders.py index 554c60a4..d88aaf67 100644 --- a/atst/routes/portfolios/task_orders.py +++ b/atst/routes/portfolios/task_orders.py @@ -14,6 +14,7 @@ from atst.forms.dd_254 import DD254Form from atst.forms.ko_review import KOReviewForm from atst.forms.officers import EditTaskOrderOfficersForm from atst.models.task_order import Status as TaskOrderStatus +from atst.models.invitation import Status as InvitationStatus from atst.utils.flash import formatted_flash as flash from atst.services.invitation import ( update_officer_invitations, @@ -130,7 +131,7 @@ def resend_invite(portfolio_id, task_order_id, form=None): invitation = Invitations.lookup_by_portfolio_and_user(portfolio, officer) - if not invitation: + if not invitation or (invitation.status is not InvitationStatus.PENDING): raise NotFoundError("invitation") Invitations.resend(g.current_user, portfolio.id, invitation.token) diff --git a/tests/routes/portfolios/test_task_orders.py b/tests/routes/portfolios/test_task_orders.py index 940e0373..0a7043e1 100644 --- a/tests/routes/portfolios/test_task_orders.py +++ b/tests/routes/portfolios/test_task_orders.py @@ -644,3 +644,40 @@ def test_resend_invite_when_ko(app, client, user_session, portfolio, user): == response.headers["Location"] ) assert len(queue.get_queue()) == queue_length + 1 + + +def test_resend_invite_when_not_pending(app, client, user_session, portfolio, user): + queue_length = len(queue.get_queue()) + + task_order = TaskOrderFactory.create( + portfolio=portfolio, contracting_officer=user, ko_invite=True + ) + + portfolio_role = PortfolioRoleFactory.create( + role=Roles.get("owner"), + portfolio=portfolio, + user=user, + status=PortfolioStatus.ACTIVE, + ) + + original_invitation = Invitations.create( + inviter=user, portfolio_role=portfolio_role, email=user.email + ) + + Invitations.accept(user=user, token=original_invitation.token) + + user_session(user) + + response = client.post( + url_for( + "portfolios.resend_invite", + portfolio_id=portfolio.id, + task_order_id=task_order.id, + _external=True, + ), + data={"invite_type": "ko_invite"}, + ) + + assert original_invitation.status == InvitationStatus.ACCEPTED + assert response.status_code == 404 + assert len(queue.get_queue()) == queue_length