94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
import pytest
|
|
from flask import url_for
|
|
|
|
from tests.factories import PortfolioFactory, TaskOrderFactory, UserFactory
|
|
|
|
|
|
def test_invite(client, user_session):
|
|
portfolio = PortfolioFactory.create()
|
|
user_session(portfolio.owner)
|
|
to = TaskOrderFactory.create(portfolio=portfolio)
|
|
response = client.post(
|
|
url_for("task_orders.invite", task_order_id=to.id), follow_redirects=False
|
|
)
|
|
redirect = url_for(
|
|
"portfolios.view_task_order", portfolio_id=to.portfolio_id, task_order_id=to.id
|
|
)
|
|
assert redirect in response.headers["Location"]
|
|
|
|
|
|
def test_invite_officers_to_task_order(client, user_session, queue):
|
|
task_order = TaskOrderFactory.create(
|
|
ko_invite=True, cor_invite=True, so_invite=True
|
|
)
|
|
portfolio = task_order.portfolio
|
|
|
|
user_session(portfolio.owner)
|
|
client.post(url_for("task_orders.invite", task_order_id=task_order.id))
|
|
|
|
# owner and three officers are portfolio members
|
|
assert len(portfolio.members) == 4
|
|
roles = [member.role.name for member in portfolio.members]
|
|
# officers exist in roles
|
|
assert roles.count("officer") == 3
|
|
# email invitations are enqueued
|
|
assert len(queue.get_queue()) == 3
|
|
# task order has relationship to user for each officer role
|
|
assert task_order.contracting_officer.dod_id == task_order.ko_dod_id
|
|
assert task_order.contracting_officer_representative.dod_id == task_order.cor_dod_id
|
|
assert task_order.security_officer.dod_id == task_order.so_dod_id
|
|
|
|
|
|
def test_add_officer_but_do_not_invite(client, user_session, queue):
|
|
task_order = TaskOrderFactory.create(
|
|
ko_invite=False, cor_invite=False, so_invite=False
|
|
)
|
|
portfolio = task_order.portfolio
|
|
|
|
user_session(portfolio.owner)
|
|
client.post(url_for("task_orders.invite", task_order_id=task_order.id))
|
|
|
|
portfolio = task_order.portfolio
|
|
# owner is only portfolio member
|
|
assert len(portfolio.members) == 1
|
|
# no invitations are enqueued
|
|
assert len(queue.get_queue()) == 0
|
|
|
|
|
|
def test_does_not_resend_officer_invitation(client, user_session):
|
|
user = UserFactory.create()
|
|
contracting_officer = UserFactory.create()
|
|
portfolio = PortfolioFactory.create(owner=user)
|
|
task_order = TaskOrderFactory.create(
|
|
creator=user,
|
|
portfolio=portfolio,
|
|
ko_first_name=contracting_officer.first_name,
|
|
ko_last_name=contracting_officer.last_name,
|
|
ko_dod_id=contracting_officer.dod_id,
|
|
ko_invite=True,
|
|
)
|
|
|
|
user_session(user)
|
|
for i in range(2):
|
|
client.post(url_for("task_orders.invite", task_order_id=task_order.id))
|
|
assert len(contracting_officer.invitations) == 1
|
|
|
|
|
|
def test_does_not_invite_if_task_order_incomplete(client, user_session, queue):
|
|
task_order = TaskOrderFactory.create(
|
|
scope=None, ko_invite=True, cor_invite=True, so_invite=True
|
|
)
|
|
portfolio = task_order.portfolio
|
|
|
|
user_session(portfolio.owner)
|
|
response = client.post(url_for("task_orders.invite", task_order_id=task_order.id))
|
|
|
|
# redirected to review screen
|
|
assert response.headers["Location"] == url_for(
|
|
"task_orders.new", screen=4, task_order_id=task_order.id, _external=True
|
|
)
|
|
# only owner is portfolio member
|
|
assert len(portfolio.members) == 1
|
|
# no email invitations are enqueued
|
|
assert len(queue.get_queue()) == 0
|