Remove request-related models

This commit is contained in:
Patrick Smith
2019-02-20 15:57:30 -05:00
parent 6fb333acb9
commit 2c62f54b83
19 changed files with 42 additions and 745 deletions

View File

@@ -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"]
)

View File

@@ -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():

View File

@@ -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

View File

@@ -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"),

View File

@@ -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"}

View File

@@ -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,

View File

@@ -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"

View File

@@ -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