Update tables to match business logic
This commit is contained in:
@@ -9,6 +9,7 @@ from atst.domain.portfolios import (
|
||||
)
|
||||
from atst.domain.portfolio_roles import PortfolioRoles
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.permission_sets import PermissionSets, PORTFOLIO_PERMISSION_SETS
|
||||
from atst.models.application_role import Status as ApplicationRoleStatus
|
||||
|
@@ -96,7 +96,6 @@ def test_create_adds_clins():
|
||||
},
|
||||
]
|
||||
task_order = TaskOrders.create(
|
||||
creator=portfolio.owner,
|
||||
portfolio_id=portfolio.id,
|
||||
number="0123456789",
|
||||
clins=clins,
|
||||
@@ -127,7 +126,6 @@ def test_update_adds_clins():
|
||||
},
|
||||
]
|
||||
task_order = TaskOrders.create(
|
||||
creator=task_order.creator,
|
||||
portfolio_id=task_order.portfolio_id,
|
||||
number="0000000000",
|
||||
clins=clins,
|
||||
|
@@ -4,36 +4,41 @@ from uuid import uuid4
|
||||
|
||||
from atst.domain.users import Users
|
||||
from atst.domain.exceptions import NotFoundError, AlreadyExistsError, UnauthorizedError
|
||||
from atst.utils import pick
|
||||
|
||||
from tests.factories import UserFactory
|
||||
|
||||
DOD_ID = "my_dod_id"
|
||||
REQUIRED_KWARGS = {"first_name": "Luke", "last_name": "Skywalker"}
|
||||
|
||||
|
||||
def test_create_user():
|
||||
user = Users.create(DOD_ID)
|
||||
user = Users.create(DOD_ID, **REQUIRED_KWARGS)
|
||||
assert user.dod_id == DOD_ID
|
||||
|
||||
|
||||
def test_create_user_with_existing_email():
|
||||
Users.create(DOD_ID, email="thisusersemail@usersRus.com")
|
||||
Users.create(DOD_ID, email="thisusersemail@usersRus.com", **REQUIRED_KWARGS)
|
||||
with pytest.raises(AlreadyExistsError):
|
||||
Users.create(DOD_ID, email="thisusersemail@usersRus.com")
|
||||
|
||||
|
||||
def test_create_user_with_nonexistent_permission_set():
|
||||
with pytest.raises(NotFoundError):
|
||||
Users.create(DOD_ID, permission_sets=["nonexistent"])
|
||||
Users.create(DOD_ID, permission_sets=["nonexistent"], **REQUIRED_KWARGS)
|
||||
|
||||
|
||||
def test_get_or_create_nonexistent_user():
|
||||
user = Users.get_or_create_by_dod_id(DOD_ID)
|
||||
user = Users.get_or_create_by_dod_id(DOD_ID, **REQUIRED_KWARGS)
|
||||
assert user.dod_id == DOD_ID
|
||||
|
||||
|
||||
def test_get_or_create_existing_user():
|
||||
fact_user = UserFactory.create()
|
||||
user = Users.get_or_create_by_dod_id(fact_user.dod_id)
|
||||
user = Users.get_or_create_by_dod_id(
|
||||
fact_user.dod_id,
|
||||
**pick(["first_name", "last_name"], fact_user.to_dictionary()),
|
||||
)
|
||||
assert user == fact_user
|
||||
|
||||
|
||||
|
@@ -236,9 +236,17 @@ class ApplicationRoleFactory(Base):
|
||||
@classmethod
|
||||
def _create(cls, model_class, *args, **kwargs):
|
||||
with_invite = kwargs.pop("invite", True)
|
||||
app_role = super()._create(model_class, *args, **kwargs)
|
||||
app_role = model_class(*args, **kwargs)
|
||||
|
||||
if with_invite:
|
||||
if with_invite and app_role.user:
|
||||
ApplicationInvitationFactory.create(
|
||||
role=app_role,
|
||||
dod_id=app_role.user.dod_id,
|
||||
first_name=app_role.user.first_name,
|
||||
last_name=app_role.user.last_name,
|
||||
email=app_role.user.email,
|
||||
)
|
||||
elif with_invite:
|
||||
ApplicationInvitationFactory.create(role=app_role)
|
||||
|
||||
return app_role
|
||||
@@ -260,6 +268,14 @@ class PortfolioInvitationFactory(Base):
|
||||
email = factory.Faker("email")
|
||||
status = InvitationStatus.PENDING
|
||||
expiration_time = PortfolioInvitations.current_expiration_time()
|
||||
dod_id = factory.LazyFunction(random_dod_id)
|
||||
first_name = factory.Faker("first_name")
|
||||
last_name = factory.Faker("last_name")
|
||||
|
||||
@classmethod
|
||||
def _create(cls, model_class, *args, **kwargs):
|
||||
inviter_id = kwargs.pop("inviter_id", UserFactory.create().id)
|
||||
return super()._create(model_class, inviter_id=inviter_id, *args, **kwargs)
|
||||
|
||||
|
||||
class ApplicationInvitationFactory(Base):
|
||||
@@ -270,6 +286,14 @@ class ApplicationInvitationFactory(Base):
|
||||
status = InvitationStatus.PENDING
|
||||
expiration_time = PortfolioInvitations.current_expiration_time()
|
||||
role = factory.SubFactory(ApplicationRoleFactory, invite=False)
|
||||
dod_id = factory.LazyFunction(random_dod_id)
|
||||
first_name = factory.Faker("first_name")
|
||||
last_name = factory.Faker("last_name")
|
||||
|
||||
@classmethod
|
||||
def _create(cls, model_class, *args, **kwargs):
|
||||
inviter_id = kwargs.pop("inviter_id", UserFactory.create().id)
|
||||
return super()._create(model_class, inviter_id=inviter_id, *args, **kwargs)
|
||||
|
||||
|
||||
class AttachmentFactory(Base):
|
||||
@@ -284,11 +308,8 @@ class TaskOrderFactory(Base):
|
||||
class Meta:
|
||||
model = TaskOrder
|
||||
|
||||
portfolio = factory.SubFactory(
|
||||
PortfolioFactory, owner=factory.SelfAttribute("..creator")
|
||||
)
|
||||
portfolio = factory.SubFactory(PortfolioFactory)
|
||||
number = factory.LazyFunction(random_task_order_number)
|
||||
creator = factory.SubFactory(UserFactory)
|
||||
signed_at = None
|
||||
_pdf = factory.SubFactory(AttachmentFactory)
|
||||
|
||||
|
@@ -76,7 +76,7 @@ class TestTaskOrderStatus:
|
||||
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
||||
def test_draft_status(self, is_signed, is_completed):
|
||||
# Given that I have a TO that is neither completed nor signed
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
is_signed.return_value = False
|
||||
is_completed.return_value = False
|
||||
|
||||
@@ -89,7 +89,7 @@ class TestTaskOrderStatus:
|
||||
def test_active_status(self, is_signed, is_completed, start_date, end_date):
|
||||
# Given that I have a signed TO and today is within its start_date and end_date
|
||||
today = pendulum.today().date()
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
|
||||
start_date.return_value = today.subtract(days=1)
|
||||
end_date.return_value = today.add(days=1)
|
||||
@@ -105,7 +105,7 @@ class TestTaskOrderStatus:
|
||||
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
||||
def test_upcoming_status(self, is_signed, is_completed, start_date, end_date):
|
||||
# Given that I have a signed TO and today is before its start_date
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
start_date.return_value = pendulum.today().add(days=1).date()
|
||||
end_date.return_value = pendulum.today().add(days=2).date()
|
||||
is_signed.return_value = True
|
||||
@@ -120,7 +120,7 @@ class TestTaskOrderStatus:
|
||||
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
||||
def test_expired_status(self, is_signed, is_completed, end_date, start_date):
|
||||
# Given that I have a signed TO and today is after its expiration date
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
end_date.return_value = pendulum.today().subtract(days=1).date()
|
||||
start_date.return_value = pendulum.today().subtract(days=2).date()
|
||||
is_signed.return_value = True
|
||||
@@ -143,7 +143,7 @@ class TestTaskOrderStatus:
|
||||
|
||||
class TestBudget:
|
||||
def test_total_contract_amount(self):
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
assert to.total_contract_amount == 0
|
||||
|
||||
clin1 = CLINFactory(task_order=to, jedi_clin_type=JEDICLINType.JEDI_CLIN_1)
|
||||
@@ -156,7 +156,7 @@ class TestBudget:
|
||||
)
|
||||
|
||||
def test_total_obligated_funds(self):
|
||||
to = TaskOrder()
|
||||
to = TaskOrderFactory.create()
|
||||
assert to.total_obligated_funds == 0
|
||||
|
||||
clin1 = CLINFactory(task_order=to, jedi_clin_type=JEDICLINType.JEDI_CLIN_1)
|
||||
|
@@ -30,7 +30,7 @@ def task_order():
|
||||
portfolio = PortfolioFactory.create(owner=user)
|
||||
attachment = Attachment(filename="sample_attachment", object_name="sample")
|
||||
|
||||
return TaskOrderFactory.create(creator=user, portfolio=portfolio)
|
||||
return TaskOrderFactory.create(portfolio=portfolio)
|
||||
|
||||
|
||||
def test_review_task_order_not_draft(client, user_session, task_order):
|
||||
|
@@ -20,14 +20,13 @@ def task_order():
|
||||
user = UserFactory.create()
|
||||
portfolio = PortfolioFactory.create(owner=user)
|
||||
|
||||
return TaskOrderFactory.create(creator=user, portfolio=portfolio)
|
||||
return TaskOrderFactory.create(portfolio=portfolio)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def completed_task_order():
|
||||
portfolio = PortfolioFactory.create()
|
||||
task_order = TaskOrderFactory.create(
|
||||
creator=portfolio.owner,
|
||||
portfolio=portfolio,
|
||||
create_clins=[{"number": "1234567890123456789012345678901234567890123"}],
|
||||
)
|
||||
@@ -68,7 +67,7 @@ def test_task_orders_submit_form_step_one_add_pdf(client, user_session, portfoli
|
||||
def test_task_orders_form_step_one_add_pdf_existing_to(
|
||||
client, user_session, task_order
|
||||
):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order.id)
|
||||
)
|
||||
@@ -77,7 +76,7 @@ def test_task_orders_form_step_one_add_pdf_existing_to(
|
||||
|
||||
def test_task_orders_submit_form_step_one_add_pdf_existing_to(client, user_session):
|
||||
task_order = TaskOrderFactory.create()
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.post(
|
||||
url_for(
|
||||
"task_orders.submit_form_step_one_add_pdf", task_order_id=task_order.id
|
||||
@@ -140,7 +139,7 @@ def test_task_orders_submit_form_step_one_validates_object_name(
|
||||
|
||||
|
||||
def test_task_orders_form_step_two_add_number(client, user_session, task_order):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for("task_orders.form_step_two_add_number", task_order_id=task_order.id)
|
||||
)
|
||||
@@ -148,7 +147,7 @@ def test_task_orders_form_step_two_add_number(client, user_session, task_order):
|
||||
|
||||
|
||||
def test_task_orders_submit_form_step_two_add_number(client, user_session, task_order):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {"number": "1234567890"}
|
||||
response = client.post(
|
||||
url_for(
|
||||
@@ -164,7 +163,7 @@ def test_task_orders_submit_form_step_two_add_number(client, user_session, task_
|
||||
def test_task_orders_submit_form_step_two_add_number_existing_to(
|
||||
client, user_session, task_order
|
||||
):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {"number": "0000000000"}
|
||||
original_number = task_order.number
|
||||
response = client.post(
|
||||
@@ -179,7 +178,7 @@ def test_task_orders_submit_form_step_two_add_number_existing_to(
|
||||
|
||||
|
||||
def test_task_orders_form_step_three_add_clins(client, user_session, task_order):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for("task_orders.form_step_three_add_clins", task_order_id=task_order.id)
|
||||
)
|
||||
@@ -187,7 +186,7 @@ def test_task_orders_form_step_three_add_clins(client, user_session, task_order)
|
||||
|
||||
|
||||
def test_task_orders_submit_form_step_three_add_clins(client, user_session, task_order):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {
|
||||
"clins-0-jedi_clin_type": "JEDI_CLIN_1",
|
||||
"clins-0-clin_number": "12312",
|
||||
@@ -237,7 +236,7 @@ def test_task_orders_submit_form_step_three_add_clins_existing_to(
|
||||
TaskOrders.create_clins(task_order.id, clin_list)
|
||||
assert len(task_order.clins) == 2
|
||||
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {
|
||||
"clins-0-jedi_clin_type": "JEDI_CLIN_1",
|
||||
"clins-0-clin_number": "12312",
|
||||
@@ -258,7 +257,7 @@ def test_task_orders_submit_form_step_three_add_clins_existing_to(
|
||||
|
||||
|
||||
def test_task_orders_form_step_four_review(client, user_session, completed_task_order):
|
||||
user_session(completed_task_order.creator)
|
||||
user_session(completed_task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for(
|
||||
"task_orders.form_step_four_review", task_order_id=completed_task_order.id
|
||||
@@ -270,7 +269,7 @@ def test_task_orders_form_step_four_review(client, user_session, completed_task_
|
||||
def test_task_orders_form_step_four_review_incomplete_to(
|
||||
client, user_session, task_order
|
||||
):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for("task_orders.form_step_four_review", task_order_id=task_order.id)
|
||||
)
|
||||
@@ -280,7 +279,7 @@ def test_task_orders_form_step_four_review_incomplete_to(
|
||||
def test_task_orders_form_step_five_confirm_signature(
|
||||
client, user_session, completed_task_order
|
||||
):
|
||||
user_session(completed_task_order.creator)
|
||||
user_session(completed_task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for(
|
||||
"task_orders.form_step_five_confirm_signature",
|
||||
@@ -293,7 +292,7 @@ def test_task_orders_form_step_five_confirm_signature(
|
||||
def test_task_orders_form_step_five_confirm_signature_incomplete_to(
|
||||
client, user_session, task_order
|
||||
):
|
||||
user_session(task_order.creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
response = client.get(
|
||||
url_for(
|
||||
"task_orders.form_step_five_confirm_signature", task_order_id=task_order.id
|
||||
@@ -340,9 +339,7 @@ def test_task_orders_submit_task_order(client, user_session, task_order):
|
||||
def test_task_orders_edit_redirects_to_latest_incomplete_step(
|
||||
client, user_session, portfolio, to_factory_args, expected_step
|
||||
):
|
||||
task_order = TaskOrderFactory.create(
|
||||
portfolio=portfolio, creator=portfolio.owner, **to_factory_args
|
||||
)
|
||||
task_order = TaskOrderFactory.create(portfolio=portfolio, **to_factory_args)
|
||||
user_session(portfolio.owner)
|
||||
|
||||
response = client.get(url_for("task_orders.edit", task_order_id=task_order.id))
|
||||
@@ -414,8 +411,7 @@ def test_task_orders_update_invalid_data(client, user_session, portfolio):
|
||||
|
||||
@pytest.mark.skip(reason="Update after implementing errors on TO form")
|
||||
def test_task_order_form_shows_errors(client, user_session, task_order):
|
||||
creator = task_order.creator
|
||||
user_session(creator)
|
||||
user_session(task_order.portfolio.owner)
|
||||
|
||||
task_order_data = TaskOrderFactory.dictionary()
|
||||
funding_data = slice_data_for_section(task_order_data, "funding")
|
||||
|
@@ -487,7 +487,9 @@ def test_portfolios_resend_invitation_access(post_url_assert_status):
|
||||
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
prr = PortfolioRoleFactory.create(user=invitee, portfolio=portfolio)
|
||||
invite = PortfolioInvitationFactory.create(user=UserFactory.create(), role=prr)
|
||||
invite = PortfolioInvitationFactory.create(
|
||||
user=UserFactory.create(), role=prr, inviter_id=owner.id
|
||||
)
|
||||
|
||||
url = url_for(
|
||||
"portfolios.resend_invitation",
|
||||
@@ -651,7 +653,6 @@ def test_task_orders_new_get_routes(get_url_assert_status):
|
||||
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
task_order = TaskOrderFactory.create(
|
||||
creator=owner,
|
||||
portfolio=portfolio,
|
||||
create_clins=[{"number": "1234567890123456789012345678901234567890123"}],
|
||||
)
|
||||
@@ -689,7 +690,7 @@ def test_task_orders_new_post_routes(post_url_assert_status):
|
||||
rando = user_with()
|
||||
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
task_order = TaskOrderFactory.create(portfolio=portfolio, creator=owner)
|
||||
task_order = TaskOrderFactory.create(portfolio=portfolio)
|
||||
|
||||
for route, data in post_routes:
|
||||
url = url_for(route, task_order_id=task_order.id)
|
||||
|
Reference in New Issue
Block a user