Remove request-related models
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
from atst.domain.applications import Applications
|
||||
from tests.factories import RequestFactory, UserFactory, PortfolioFactory
|
||||
from tests.factories import UserFactory, PortfolioFactory
|
||||
from atst.domain.portfolios import Portfolios
|
||||
|
||||
|
||||
def test_create_application_with_multiple_environments():
|
||||
request = RequestFactory.create()
|
||||
portfolio = Portfolios.create_from_request(request)
|
||||
portfolio = PortfolioFactory.create()
|
||||
application = Applications.create(
|
||||
portfolio.owner, portfolio, "My Test Application", "Test", ["dev", "prod"]
|
||||
)
|
||||
|
||||
@@ -8,12 +8,7 @@ from atst.domain.applications import Applications
|
||||
from atst.domain.environments import Environments
|
||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||
|
||||
from tests.factories import (
|
||||
RequestFactory,
|
||||
UserFactory,
|
||||
PortfolioRoleFactory,
|
||||
PortfolioFactory,
|
||||
)
|
||||
from tests.factories import UserFactory, PortfolioRoleFactory, PortfolioFactory
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
@@ -22,39 +17,21 @@ def portfolio_owner():
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def request_(portfolio_owner):
|
||||
return RequestFactory.create(creator=portfolio_owner)
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def portfolio(request_):
|
||||
portfolio = Portfolios.create_from_request(request_)
|
||||
def portfolio(portfolio_owner):
|
||||
portfolio = PortfolioFactory.create(owner=portfolio_owner)
|
||||
return portfolio
|
||||
|
||||
|
||||
def test_can_create_portfolio(request_):
|
||||
portfolio = Portfolios.create_from_request(request_, name="frugal-whale")
|
||||
def test_can_create_portfolio():
|
||||
portfolio = PortfolioFactory.create(name="frugal-whale")
|
||||
assert portfolio.name == "frugal-whale"
|
||||
|
||||
|
||||
def test_request_is_associated_with_portfolio(portfolio, request_):
|
||||
assert portfolio.request == request_
|
||||
|
||||
|
||||
def test_default_portfolio_name_is_request_name(portfolio, request_):
|
||||
assert portfolio.name == str(request_.displayname)
|
||||
|
||||
|
||||
def test_get_nonexistent_portfolio_raises():
|
||||
with pytest.raises(NotFoundError):
|
||||
Portfolios.get(UserFactory.build(), uuid4())
|
||||
|
||||
|
||||
def test_can_get_portfolio_by_request(portfolio):
|
||||
found = Portfolios.get_by_request(portfolio.request)
|
||||
assert portfolio == found
|
||||
|
||||
|
||||
def test_creating_portfolio_adds_owner(portfolio, portfolio_owner):
|
||||
assert portfolio.roles[0].user == portfolio_owner
|
||||
|
||||
@@ -162,10 +139,6 @@ def test_need_permission_to_update_portfolio_role_role(portfolio, portfolio_owne
|
||||
|
||||
|
||||
def test_owner_can_view_portfolio_members(portfolio, portfolio_owner):
|
||||
portfolio_owner = UserFactory.create()
|
||||
portfolio = Portfolios.create_from_request(
|
||||
RequestFactory.create(creator=portfolio_owner)
|
||||
)
|
||||
portfolio = Portfolios.get_with_members(portfolio_owner, portfolio.id)
|
||||
|
||||
assert portfolio
|
||||
@@ -258,7 +231,7 @@ def test_for_user_returns_active_portfolios_for_user(portfolio, portfolio_owner)
|
||||
PortfolioRoleFactory.create(
|
||||
user=bob, portfolio=portfolio, status=PortfolioRoleStatus.ACTIVE
|
||||
)
|
||||
Portfolios.create_from_request(RequestFactory.create())
|
||||
PortfolioFactory.create()
|
||||
|
||||
bobs_portfolios = Portfolios.for_user(bob)
|
||||
|
||||
@@ -268,7 +241,7 @@ def test_for_user_returns_active_portfolios_for_user(portfolio, portfolio_owner)
|
||||
def test_for_user_does_not_return_inactive_portfolios(portfolio, portfolio_owner):
|
||||
bob = UserFactory.from_atat_role("default")
|
||||
Portfolios.add_member(portfolio, bob, "developer")
|
||||
Portfolios.create_from_request(RequestFactory.create())
|
||||
PortfolioFactory.create()
|
||||
bobs_portfolios = Portfolios.for_user(bob)
|
||||
|
||||
assert len(bobs_portfolios) == 0
|
||||
@@ -276,17 +249,13 @@ def test_for_user_does_not_return_inactive_portfolios(portfolio, portfolio_owner
|
||||
|
||||
def test_for_user_returns_all_portfolios_for_ccpo(portfolio, portfolio_owner):
|
||||
sam = UserFactory.from_atat_role("ccpo")
|
||||
Portfolios.create_from_request(RequestFactory.create())
|
||||
PortfolioFactory.create()
|
||||
|
||||
sams_portfolios = Portfolios.for_user(sam)
|
||||
assert len(sams_portfolios) == 2
|
||||
|
||||
|
||||
def test_get_for_update_information():
|
||||
portfolio_owner = UserFactory.create()
|
||||
portfolio = Portfolios.create_from_request(
|
||||
RequestFactory.create(creator=portfolio_owner)
|
||||
)
|
||||
def test_get_for_update_information(portfolio, portfolio_owner):
|
||||
owner_ws = Portfolios.get_for_update_information(portfolio_owner, portfolio.id)
|
||||
assert portfolio == owner_ws
|
||||
|
||||
@@ -307,8 +276,8 @@ def test_get_for_update_information():
|
||||
|
||||
def test_can_create_portfolios_with_matching_names():
|
||||
portfolio_name = "Great Portfolio"
|
||||
Portfolios.create_from_request(RequestFactory.create(), name=portfolio_name)
|
||||
Portfolios.create_from_request(RequestFactory.create(), name=portfolio_name)
|
||||
PortfolioFactory.create(name=portfolio_name)
|
||||
PortfolioFactory.create(name=portfolio_name)
|
||||
|
||||
|
||||
def test_able_to_revoke_portfolio_access_for_active_member():
|
||||
|
||||
@@ -1,27 +1,17 @@
|
||||
from atst.domain.reports import Reports
|
||||
|
||||
from tests.factories import RequestFactory, LegacyTaskOrderFactory, PortfolioFactory
|
||||
|
||||
CLIN_NUMS = ["0001", "0003", "1001", "1003", "2001", "2003"]
|
||||
from tests.factories import PortfolioFactory
|
||||
|
||||
|
||||
def test_portfolio_totals():
|
||||
legacy_task_order = LegacyTaskOrderFactory.create()
|
||||
|
||||
for num in CLIN_NUMS:
|
||||
setattr(legacy_task_order, "clin_{}".format(num), 200)
|
||||
|
||||
request = RequestFactory.create(legacy_task_order=legacy_task_order)
|
||||
portfolio = PortfolioFactory.create(request=request)
|
||||
portfolio = PortfolioFactory.create()
|
||||
report = Reports.portfolio_totals(portfolio)
|
||||
total = 200 * len(CLIN_NUMS)
|
||||
assert report == {"budget": total, "spent": 0}
|
||||
assert report == {"budget": 0, "spent": 0}
|
||||
|
||||
|
||||
# this is sketched in until we do real reporting
|
||||
def test_monthly_totals():
|
||||
request = RequestFactory.create()
|
||||
portfolio = PortfolioFactory.create(request=request)
|
||||
portfolio = PortfolioFactory.create()
|
||||
monthly = Reports.monthly_totals(portfolio)
|
||||
|
||||
assert not monthly["environments"]
|
||||
@@ -31,8 +21,7 @@ def test_monthly_totals():
|
||||
|
||||
# this is sketched in until we do real reporting
|
||||
def test_cumulative_budget():
|
||||
request = RequestFactory.create()
|
||||
portfolio = PortfolioFactory.create(request=request)
|
||||
portfolio = PortfolioFactory.create()
|
||||
months = Reports.cumulative_budget(portfolio)
|
||||
|
||||
assert len(months["months"]) >= 12
|
||||
|
||||
@@ -9,10 +9,6 @@ from faker import Faker as _Faker
|
||||
from atst.forms import data
|
||||
from atst.models.attachment import Attachment
|
||||
from atst.models.environment import Environment
|
||||
from atst.models.request import Request
|
||||
from atst.models.request_revision import RequestRevision
|
||||
from atst.models.request_review import RequestReview
|
||||
from atst.models.request_status_event import RequestStatusEvent, RequestStatus
|
||||
from atst.models.pe_number import PENumber
|
||||
from atst.models.application import Application
|
||||
from atst.models.legacy_task_order import LegacyTaskOrder, Source, FundingType
|
||||
@@ -105,142 +101,6 @@ class UserFactory(Base):
|
||||
return cls.create(atat_role=role, **kwargs)
|
||||
|
||||
|
||||
class RequestStatusEventFactory(Base):
|
||||
class Meta:
|
||||
model = RequestStatusEvent
|
||||
|
||||
id = factory.Sequence(lambda x: uuid4())
|
||||
sequence = 1
|
||||
|
||||
|
||||
class RequestRevisionFactory(Base):
|
||||
class Meta:
|
||||
model = RequestRevision
|
||||
|
||||
id = factory.Sequence(lambda x: uuid4())
|
||||
|
||||
|
||||
class RequestReviewFactory(Base):
|
||||
class Meta:
|
||||
model = RequestReview
|
||||
|
||||
comment = factory.Faker("sentence")
|
||||
fname_mao = factory.Faker("first_name")
|
||||
lname_mao = factory.Faker("last_name")
|
||||
email_mao = factory.Faker("email")
|
||||
phone_mao = factory.LazyFunction(
|
||||
lambda: "".join(random.choices(string.digits, k=10))
|
||||
)
|
||||
fname_ccpo = factory.Faker("first_name")
|
||||
lname_ccpo = factory.Faker("last_name")
|
||||
|
||||
|
||||
class RequestFactory(Base):
|
||||
class Meta:
|
||||
model = Request
|
||||
|
||||
id = factory.Sequence(lambda x: uuid4())
|
||||
creator = factory.SubFactory(UserFactory)
|
||||
revisions = factory.LazyAttribute(
|
||||
lambda r: [RequestFactory.create_initial_revision(r)]
|
||||
)
|
||||
status_events = factory.RelatedFactory(
|
||||
RequestStatusEventFactory,
|
||||
"request",
|
||||
new_status=RequestStatus.STARTED,
|
||||
revision=factory.LazyAttribute(lambda se: se.factory_parent.revisions[-1]),
|
||||
)
|
||||
|
||||
class Params:
|
||||
initial_revision = None
|
||||
|
||||
@classmethod
|
||||
def _adjust_kwargs(cls, **kwargs):
|
||||
if kwargs.pop("with_task_order", False) and "legacy_task_order" not in kwargs:
|
||||
kwargs["legacy_task_order"] = LegacyTaskOrderFactory.build()
|
||||
return kwargs
|
||||
|
||||
@classmethod
|
||||
def create_initial_status_event(cls, request):
|
||||
return RequestStatusEventFactory(
|
||||
request=request,
|
||||
new_status=RequestStatus.STARTED,
|
||||
revision=request.revisions,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def create_initial_revision(cls, request, dollar_value=1_000_000):
|
||||
user = request.creator
|
||||
default_data = dict(
|
||||
name=factory.Faker("domain_word"),
|
||||
am_poc=False,
|
||||
dodid_poc=user.dod_id,
|
||||
email_poc=user.email,
|
||||
fname_poc=user.first_name,
|
||||
lname_poc=user.last_name,
|
||||
jedi_usage="adf",
|
||||
start_date=datetime.date(2050, 1, 1),
|
||||
cloud_native="yes",
|
||||
dollar_value=dollar_value,
|
||||
dod_component=random_service_branch(),
|
||||
data_transfers="Less than 100GB",
|
||||
expected_completion_date="Less than 1 month",
|
||||
jedi_migration="yes",
|
||||
num_software_systems=1,
|
||||
number_user_sessions=2,
|
||||
average_daily_traffic=1,
|
||||
engineering_assessment="yes",
|
||||
technical_support_team="yes",
|
||||
estimated_monthly_spend=100,
|
||||
average_daily_traffic_gb=4,
|
||||
rationalization_software_systems="yes",
|
||||
organization_providing_assistance="In-house staff",
|
||||
citizenship="United States",
|
||||
designation="military",
|
||||
phone_number="1234567890",
|
||||
phone_ext="123",
|
||||
email_request=user.email,
|
||||
fname_request=user.first_name,
|
||||
lname_request=user.last_name,
|
||||
service_branch=random_service_branch(),
|
||||
date_latest_training=datetime.date(2018, 8, 6),
|
||||
)
|
||||
|
||||
data = (
|
||||
request.initial_revision
|
||||
if request.initial_revision is not None
|
||||
else default_data
|
||||
)
|
||||
|
||||
return RequestRevisionFactory.build(**data)
|
||||
|
||||
@classmethod
|
||||
def create_with_status(cls, status=RequestStatus.STARTED, **kwargs):
|
||||
request = RequestFactory(**kwargs)
|
||||
RequestStatusEventFactory.create(
|
||||
request=request, revision=request.latest_revision, new_status=status
|
||||
)
|
||||
return request
|
||||
|
||||
@classmethod
|
||||
def mock_financial_data(cls):
|
||||
fake = _Faker()
|
||||
return {
|
||||
"pe_id": "0101110F",
|
||||
"fname_co": fake.first_name(),
|
||||
"lname_co": fake.last_name(),
|
||||
"email_co": fake.email(),
|
||||
"office_co": fake.phone_number(),
|
||||
"fname_cor": fake.first_name(),
|
||||
"lname_cor": fake.last_name(),
|
||||
"email_cor": fake.email(),
|
||||
"office_cor": fake.phone_number(),
|
||||
"uii_ids": "123abc",
|
||||
"treasury_code": "00123456",
|
||||
"ba_code": "02A",
|
||||
}
|
||||
|
||||
|
||||
class PENumberFactory(Base):
|
||||
class Meta:
|
||||
model = PENumber
|
||||
@@ -269,9 +129,7 @@ class PortfolioFactory(Base):
|
||||
class Meta:
|
||||
model = Portfolio
|
||||
|
||||
request = factory.SubFactory(RequestFactory, with_task_order=True)
|
||||
# name it the same as the request ID by default
|
||||
name = factory.LazyAttribute(lambda w: w.request.id)
|
||||
name = factory.Faker("name")
|
||||
|
||||
@classmethod
|
||||
def _create(cls, model_class, *args, **kwargs):
|
||||
@@ -286,7 +144,6 @@ class PortfolioFactory(Base):
|
||||
for p in with_applications
|
||||
]
|
||||
|
||||
portfolio.request.creator = owner
|
||||
PortfolioRoleFactory.create(
|
||||
portfolio=portfolio,
|
||||
role=Roles.get("owner"),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from tests.factories import RequestFactory, UserFactory
|
||||
from tests.factories import UserFactory
|
||||
|
||||
|
||||
DOD_SDN_INFO = {"first_name": "ART", "last_name": "GARFUNKEL", "dod_id": "5892460358"}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.domain.applications import Applications
|
||||
from tests.factories import RequestFactory, UserFactory
|
||||
from tests.factories import PortfolioFactory, UserFactory
|
||||
|
||||
|
||||
def test_add_user_to_environment():
|
||||
owner = UserFactory.create()
|
||||
developer = UserFactory.from_atat_role("developer")
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
application = Applications.create(
|
||||
owner,
|
||||
portfolio,
|
||||
|
||||
@@ -9,7 +9,6 @@ from atst.models.invitation import Status as InvitationStatus
|
||||
from atst.models.audit_event import AuditEvent
|
||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||
from tests.factories import (
|
||||
RequestFactory,
|
||||
UserFactory,
|
||||
InvitationFactory,
|
||||
PortfolioRoleFactory,
|
||||
@@ -25,7 +24,7 @@ def test_has_no_ws_role_history(session):
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = PortfolioRoles.add(user, portfolio.id, "developer")
|
||||
create_event = (
|
||||
session.query(AuditEvent)
|
||||
@@ -42,7 +41,7 @@ def test_has_ws_role_history(session):
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
role = session.query(Role).filter(Role.name == "developer").one()
|
||||
# in order to get the history, we don't want the PortfolioRoleFactory
|
||||
# to commit after create()
|
||||
@@ -67,7 +66,7 @@ def test_has_ws_status_history(session):
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
# in order to get the history, we don't want the PortfolioRoleFactory
|
||||
# to commit after create()
|
||||
PortfolioRoleFactory._meta.sqlalchemy_session_persistence = "flush"
|
||||
@@ -89,7 +88,7 @@ def test_has_ws_status_history(session):
|
||||
def test_has_no_env_role_history(session):
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
application = ApplicationFactory.create(portfolio=portfolio)
|
||||
environment = EnvironmentFactory.create(
|
||||
application=application, name="new environment!"
|
||||
@@ -110,7 +109,7 @@ def test_has_no_env_role_history(session):
|
||||
def test_has_env_role_history(session):
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = PortfolioRoleFactory.create(portfolio=portfolio, user=user)
|
||||
application = ApplicationFactory.create(portfolio=portfolio)
|
||||
environment = EnvironmentFactory.create(
|
||||
@@ -137,7 +136,7 @@ def test_event_details():
|
||||
owner = UserFactory.create()
|
||||
user = UserFactory.create()
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = PortfolioRoles.add(user, portfolio.id, "developer")
|
||||
|
||||
assert portfolio_role.event_details["updated_user_name"] == user.displayname
|
||||
@@ -154,7 +153,7 @@ def test_has_no_environment_roles():
|
||||
"portfolio_role": "developer",
|
||||
}
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = Portfolios.create_member(owner, portfolio, developer_data)
|
||||
|
||||
assert not portfolio_role.has_environment_roles
|
||||
@@ -170,7 +169,7 @@ def test_has_environment_roles():
|
||||
"portfolio_role": "developer",
|
||||
}
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = Portfolios.create_member(owner, portfolio, developer_data)
|
||||
application = Applications.create(
|
||||
owner,
|
||||
@@ -195,7 +194,7 @@ def test_role_displayname():
|
||||
"portfolio_role": "developer",
|
||||
}
|
||||
|
||||
portfolio = Portfolios.create_from_request(RequestFactory.create(creator=owner))
|
||||
portfolio = PortfolioFactory.create(owner=owner)
|
||||
portfolio_role = Portfolios.create_member(owner, portfolio, developer_data)
|
||||
|
||||
assert portfolio_role.role_displayname == "Developer"
|
||||
|
||||
@@ -1,28 +1,27 @@
|
||||
import pytest
|
||||
|
||||
from tests.factories import UserFactory, PortfolioFactory, RequestFactory
|
||||
from tests.factories import UserFactory, PortfolioFactory
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||
|
||||
|
||||
def test_request_owner_with_one_portfolio_redirected_to_reports(client, user_session):
|
||||
request = RequestFactory.create()
|
||||
portfolio = Portfolios.create_from_request(request)
|
||||
def test_portfolio_owner_with_one_portfolio_redirected_to_reports(client, user_session):
|
||||
portfolio = PortfolioFactory.create()
|
||||
|
||||
user_session(request.creator)
|
||||
user_session(portfolio.owner)
|
||||
response = client.get("/home", follow_redirects=False)
|
||||
|
||||
assert "/portfolios/{}/reports".format(portfolio.id) in response.location
|
||||
|
||||
|
||||
def test_request_owner_with_more_than_one_portfolio_redirected_to_portfolios(
|
||||
def test_portfolio_owner_with_more_than_one_portfolio_redirected_to_portfolios(
|
||||
client, user_session
|
||||
):
|
||||
request_creator = UserFactory.create()
|
||||
Portfolios.create_from_request(RequestFactory.create(creator=request_creator))
|
||||
Portfolios.create_from_request(RequestFactory.create(creator=request_creator))
|
||||
owner = UserFactory.create()
|
||||
PortfolioFactory.create(owner=owner)
|
||||
PortfolioFactory.create(owner=owner)
|
||||
|
||||
user_session(request_creator)
|
||||
user_session(owner)
|
||||
response = client.get("/home", follow_redirects=False)
|
||||
|
||||
assert "/portfolios" in response.location
|
||||
|
||||
Reference in New Issue
Block a user