remove unused domain methods and arguments

This commit is contained in:
dandds
2019-03-20 13:22:27 -04:00
parent de7c69bde7
commit 4a0dd2d432
33 changed files with 170 additions and 234 deletions

View File

@@ -6,7 +6,7 @@ from atst.domain.portfolios import Portfolios
def test_create_application_with_multiple_environments():
portfolio = PortfolioFactory.create()
application = Applications.create(
portfolio.owner, portfolio, "My Test Application", "Test", ["dev", "prod"]
portfolio, "My Test Application", "Test", ["dev", "prod"]
)
assert application.portfolio == portfolio
@@ -21,7 +21,7 @@ def test_portfolio_owner_can_view_environments():
owner=owner,
applications=[{"environments": [{"name": "dev"}, {"name": "prod"}]}],
)
application = Applications.get(owner, portfolio, portfolio.applications[0].id)
application = Applications.get(portfolio.applications[0].id)
assert len(application.environments) == 2
@@ -38,11 +38,9 @@ def test_can_only_update_name_and_description():
}
],
)
application = Applications.get(owner, portfolio, portfolio.applications[0].id)
application = Applications.get(portfolio.applications[0].id)
env_name = application.environments[0].name
Applications.update(
owner,
portfolio,
application,
{
"name": "New Name",

View File

@@ -28,39 +28,43 @@ def test_non_admin_cannot_view_audit_log(developer):
AuditLog.get_all_events(developer)
def test_ccpo_can_view_audit_log(ccpo):
events = AuditLog.get_all_events(ccpo)
@pytest.mark.skip(reason="redo as a route access test")
def test_ccpo_can_view_audit_log():
events = AuditLog.get_all_events()
assert len(events) > 0
def test_paginate_audit_log(ccpo):
def test_paginate_audit_log():
user = UserFactory.create()
for _ in range(100):
AuditLog.log_system_event(user, action="create")
events = AuditLog.get_all_events(ccpo, pagination_opts={"per_page": 25, "page": 2})
events = AuditLog.get_all_events(pagination_opts={"per_page": 25, "page": 2})
assert len(events) == 25
def test_ccpo_can_view_ws_audit_log(ccpo):
@pytest.mark.skip(reason="redo as a route access test")
def test_ccpo_can_view_ws_audit_log():
portfolio = PortfolioFactory.create()
events = AuditLog.get_portfolio_events(ccpo, portfolio)
events = AuditLog.get_portfolio_events(portfolio)
assert len(events) > 0
@pytest.mark.skip(reason="redo as a route access test")
def test_ws_admin_can_view_ws_audit_log():
portfolio = PortfolioFactory.create()
admin = UserFactory.create()
PortfolioRoleFactory.create(
portfolio=portfolio, user=admin, status=PortfolioRoleStatus.ACTIVE
)
events = AuditLog.get_portfolio_events(admin, portfolio)
events = AuditLog.get_portfolio_events(portfolio)
assert len(events) > 0
@pytest.mark.skip(reason="redo as a route access test")
def test_ws_owner_can_view_ws_audit_log():
portfolio = PortfolioFactory.create()
events = AuditLog.get_portfolio_events(portfolio.owner, portfolio)
events = AuditLog.get_portfolio_events(portfolio)
assert len(events) > 0
@@ -81,7 +85,7 @@ def test_paginate_ws_audit_log():
)
events = AuditLog.get_portfolio_events(
portfolio.owner, portfolio, pagination_opts={"per_page": 25, "page": 2}
portfolio, pagination_opts={"per_page": 25, "page": 2}
)
assert len(events) == 25
@@ -94,7 +98,7 @@ def test_ws_audit_log_only_includes_current_ws_events():
application_1 = ApplicationFactory.create(portfolio=portfolio)
application_2 = ApplicationFactory.create(portfolio=other_portfolio)
events = AuditLog.get_portfolio_events(portfolio.owner, portfolio)
events = AuditLog.get_portfolio_events(portfolio)
for event in events:
assert event.portfolio_id == portfolio.id or event.resource_id == portfolio.id
assert (

View File

@@ -29,9 +29,7 @@ def test_create_environment_role_creates_cloud_id(session):
portfolio_role = portfolio.members[0]
assert not portfolio_role.user.cloud_id
assert Environments.update_environment_roles(
owner, portfolio, portfolio_role, new_role
)
assert Environments.update_environment_roles(portfolio_role, new_role)
assert portfolio_role.user.cloud_id is not None
@@ -69,9 +67,7 @@ def test_update_environment_roles():
]
portfolio_role = portfolio.members[0]
assert Environments.update_environment_roles(
owner, portfolio, portfolio_role, new_ids_and_roles
)
assert Environments.update_environment_roles(portfolio_role, new_ids_and_roles)
new_dev_env_role = EnvironmentRoles.get(portfolio_role.user.id, dev_env.id)
staging_env_role = EnvironmentRoles.get(portfolio_role.user.id, staging_env.id)
@@ -120,9 +116,7 @@ def test_remove_environment_role():
]
portfolio_role = PortfolioRoles.get(portfolio.id, developer.id)
assert Environments.update_environment_roles(
owner, portfolio, portfolio_role, new_environment_roles
)
assert Environments.update_environment_roles(portfolio_role, new_environment_roles)
assert portfolio_role.num_environment_roles == 2
assert EnvironmentRoles.get(developer.id, now_ba).role == "billing_auditor"
@@ -154,9 +148,7 @@ def test_no_update_to_environment_roles():
new_ids_and_roles = [{"id": dev_env.id, "role": "devops"}]
portfolio_role = PortfolioRoles.get(portfolio.id, developer.id)
assert not Environments.update_environment_roles(
owner, portfolio, portfolio_role, new_ids_and_roles
)
assert not Environments.update_environment_roles(portfolio_role, new_ids_and_roles)
def test_get_scoped_environments(db):

View File

@@ -130,7 +130,7 @@ def test_resend_invitation():
user = UserFactory.create()
ws_role = PortfolioRoleFactory.create(user=user, portfolio=portfolio)
invite = Invitations.create(portfolio.owner, ws_role, user.email)
Invitations.resend(portfolio.owner, portfolio.id, invite.token)
Invitations.resend(user, invite.token)
assert ws_role.invitations[0].is_revoked
assert ws_role.invitations[1].is_pending

View File

@@ -54,7 +54,7 @@ def test_portfolios_get_ensures_user_is_in_portfolio(portfolio, portfolio_owner)
def test_get_for_update_applications_allows_owner(portfolio, portfolio_owner):
Portfolios.get_for_update_applications(portfolio_owner, portfolio.id)
Portfolios.get_for_update(portfolio.id)
@pytest.mark.skip(reason="redo as a route access test")
@@ -63,7 +63,7 @@ def test_get_for_update_applications_blocks_developer(portfolio):
PortfolioRoles.add(developer, portfolio.id)
with pytest.raises(UnauthorizedError):
Portfolios.get_for_update_applications(developer, portfolio.id)
Portfolios.get_for_update(portfolio.id)
def test_can_create_portfolio_role(portfolio, portfolio_owner):
@@ -75,7 +75,7 @@ def test_can_create_portfolio_role(portfolio, portfolio_owner):
"dod_id": "1234567890",
}
new_member = Portfolios.create_member(portfolio_owner, portfolio, user_data)
new_member = Portfolios.create_member(portfolio, user_data)
assert new_member.portfolio == portfolio
assert new_member.user.provisional
@@ -90,7 +90,7 @@ def test_can_add_existing_user_to_portfolio(portfolio, portfolio_owner):
"dod_id": user.dod_id,
}
new_member = Portfolios.create_member(portfolio_owner, portfolio, user_data)
new_member = Portfolios.create_member(portfolio, user_data)
assert new_member.portfolio == portfolio
assert new_member.user.email == user.email
assert not new_member.user.provisional
@@ -109,7 +109,7 @@ def test_need_permission_to_create_portfolio_role(portfolio, portfolio_owner):
}
with pytest.raises(UnauthorizedError):
Portfolios.create_member(random_user, portfolio, user_data)
Portfolios.create_member(portfolio, user_data)
def test_update_portfolio_role_role(portfolio, portfolio_owner):
@@ -124,9 +124,7 @@ def test_update_portfolio_role_role(portfolio, portfolio_owner):
member = PortfolioRoleFactory.create(portfolio=portfolio)
permission_sets = [PermissionSets.EDIT_PORTFOLIO_FUNDING]
updated_member = Portfolios.update_member(
portfolio_owner, portfolio, member, permission_sets=permission_sets
)
updated_member = Portfolios.update_member(member, permission_sets=permission_sets)
assert updated_member.portfolio == portfolio
@@ -140,22 +138,22 @@ def test_need_permission_to_update_portfolio_role_role(portfolio, portfolio_owne
"portfolio_role": "developer",
"dod_id": "1234567890",
}
member = Portfolios.create_member(portfolio_owner, portfolio, user_data)
member = Portfolios.create_member(portfolio, user_data)
role_name = "developer"
with pytest.raises(UnauthorizedError):
Portfolios.update_member(random_user, portfolio, member, role_name)
Portfolios.update_member(member, role_name)
def test_owner_can_view_portfolio_members(portfolio, portfolio_owner):
portfolio = Portfolios.get_with_members(portfolio_owner, portfolio.id)
portfolio = Portfolios.get_for_update(portfolio.id)
assert portfolio
def test_ccpo_can_view_portfolio_members(portfolio, portfolio_owner):
ccpo = UserFactory.create_ccpo()
assert Portfolios.get_with_members(ccpo, portfolio.id)
assert Portfolios.get_for_update(portfolio.id)
@pytest.mark.skip(reason="redo as a route access test")
@@ -163,16 +161,12 @@ def test_random_user_cannot_view_portfolio_members(portfolio):
developer = UserFactory.create()
with pytest.raises(UnauthorizedError):
portfolio = Portfolios.get_with_members(developer, portfolio.id)
portfolio = Portfolios.get_for_update(portfolio.id)
def test_scoped_portfolio_for_admin_missing_view_apps_perms(portfolio_owner, portfolio):
Applications.create(
portfolio_owner,
portfolio,
"My Application 2",
"My application 2",
["dev", "staging", "prod"],
portfolio, "My Application 2", "My application 2", ["dev", "staging", "prod"]
)
restricted_admin = UserFactory.create()
PortfolioRoleFactory.create(
@@ -191,18 +185,10 @@ def test_scoped_portfolio_only_returns_a_users_applications_and_environments(
portfolio, portfolio_owner
):
new_application = Applications.create(
portfolio_owner,
portfolio,
"My Application",
"My application",
["dev", "staging", "prod"],
portfolio, "My Application", "My application", ["dev", "staging", "prod"]
)
Applications.create(
portfolio_owner,
portfolio,
"My Application 2",
"My application 2",
["dev", "staging", "prod"],
portfolio, "My Application 2", "My application 2", ["dev", "staging", "prod"]
)
developer = UserFactory.create()
dev_environment = Environments.add_member(
@@ -222,11 +208,7 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_admin(
):
for _ in range(5):
Applications.create(
portfolio_owner,
portfolio,
"My Application",
"My application",
["dev", "staging", "prod"],
portfolio, "My Application", "My application", ["dev", "staging", "prod"]
)
admin = UserFactory.create()
@@ -245,11 +227,7 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_owner(
):
for _ in range(5):
Applications.create(
portfolio_owner,
portfolio,
"My Application",
"My application",
["dev", "staging", "prod"],
portfolio, "My Application", "My application", ["dev", "staging", "prod"]
)
scoped_portfolio = Portfolios.get(portfolio_owner, portfolio.id)
@@ -289,7 +267,7 @@ def test_for_user_returns_all_portfolios_for_ccpo(portfolio, portfolio_owner):
@pytest.mark.skip(reason="redo as a route access test")
def test_get_for_update_information(portfolio, portfolio_owner):
owner_ws = Portfolios.get_for_update_information(portfolio_owner, portfolio.id)
owner_ws = Portfolios.get_for_update(portfolio.id)
assert portfolio == owner_ws
admin = UserFactory.create()
@@ -297,16 +275,16 @@ def test_get_for_update_information(portfolio, portfolio_owner):
PortfolioRoleFactory.create(
user=admin, portfolio=portfolio, permission_sets=perm_sets
)
admin_ws = Portfolios.get_for_update_information(admin, portfolio.id)
admin_ws = Portfolios.get_for_update(portfolio.id)
assert portfolio == admin_ws
# TODO: implement ccpo roles
# ccpo = UserFactory.create_ccpo()
# assert Portfolios.get_for_update_information(ccpo, portfolio.id)
# assert Portfolios.get_for_update(portfolio.id)
developer = UserFactory.create()
with pytest.raises(UnauthorizedError):
Portfolios.get_for_update_information(developer, portfolio.id)
Portfolios.get_for_update(portfolio.id)
def test_can_create_portfolios_with_matching_names():
@@ -320,7 +298,7 @@ def test_able_to_revoke_portfolio_access_for_active_member():
portfolio_role = PortfolioRoleFactory.create(
portfolio=portfolio, status=PortfolioRoleStatus.ACTIVE
)
Portfolios.revoke_access(portfolio.owner, portfolio.id, portfolio_role.id)
Portfolios.revoke_access(portfolio.id, portfolio_role.id)
assert Portfolios.for_user(portfolio_role.user) == []
@@ -340,7 +318,7 @@ def test_unable_to_revoke_owner_portfolio_access():
owner_portfolio_role = portfolio.roles[0]
with pytest.raises(PortfolioError):
Portfolios.revoke_access(portfolio.owner, portfolio.id, owner_portfolio_role.id)
Portfolios.revoke_access(portfolio.id, owner_portfolio_role.id)
def test_disabled_members_dont_show_up(session):

View File

@@ -21,7 +21,7 @@ def test_is_signed_by_ko():
assert not TaskOrders.is_signed_by_ko(task_order)
TaskOrders.update(user, task_order, signer_dod_id=user.dod_id)
TaskOrders.update(task_order, signer_dod_id=user.dod_id)
assert TaskOrders.is_signed_by_ko(task_order)
@@ -68,7 +68,7 @@ def test_add_officer():
task_order = TaskOrderFactory.create()
ko = UserFactory.create()
owner = task_order.portfolio.owner
TaskOrders.add_officer(owner, task_order, "contracting_officer", ko.to_dictionary())
TaskOrders.add_officer(task_order, "contracting_officer", ko.to_dictionary())
assert task_order.contracting_officer == ko
portfolio_users = [ws_role.user for ws_role in task_order.portfolio.members]
@@ -80,15 +80,13 @@ def test_add_officer_with_nonexistent_role():
ko = UserFactory.create()
owner = task_order.portfolio.owner
with pytest.raises(TaskOrderError):
TaskOrders.add_officer(owner, task_order, "pilot", ko.to_dictionary())
TaskOrders.add_officer(task_order, "pilot", ko.to_dictionary())
def test_add_officer_who_is_already_portfolio_member():
task_order = TaskOrderFactory.create()
owner = task_order.portfolio.owner
TaskOrders.add_officer(
owner, task_order, "contracting_officer", owner.to_dictionary()
)
TaskOrders.add_officer(task_order, "contracting_officer", owner.to_dictionary())
assert task_order.contracting_officer == owner
member = task_order.portfolio.members[0]
@@ -122,9 +120,7 @@ def test_task_order_access():
for prms in PortfolioRoles.DEFAULT_PORTFOLIO_PERMISSION_SETS
],
)
TaskOrders.add_officer(
creator, task_order, "contracting_officer", officer.to_dictionary()
)
TaskOrders.add_officer(task_order, "contracting_officer", officer.to_dictionary())
check_access([creator, officer, member], [rando], "get", [task_order.id])
check_access([creator, officer], [member, rando], "create", [portfolio])

View File

@@ -9,11 +9,7 @@ def test_add_user_to_environment():
portfolio = PortfolioFactory.create(owner=owner)
application = Applications.create(
owner,
portfolio,
"my test application",
"It's mine.",
["dev", "staging", "prod"],
portfolio, "my test application", "It's mine.", ["dev", "staging", "prod"]
)
dev_environment = application.environments[0]

View File

@@ -120,7 +120,7 @@ def test_has_env_role_history(session):
user=user, environment=environment, role="developer"
)
Environments.update_environment_roles(
owner, portfolio, portfolio_role, [{"role": "admin", "id": environment.id}]
portfolio_role, [{"role": "admin", "id": environment.id}]
)
changed_events = (
session.query(AuditEvent)
@@ -154,7 +154,7 @@ def test_has_no_environment_roles():
}
portfolio = PortfolioFactory.create(owner=owner)
portfolio_role = Portfolios.create_member(owner, portfolio, developer_data)
portfolio_role = Portfolios.create_member(portfolio, developer_data)
assert not portfolio_role.has_environment_roles
@@ -170,13 +170,9 @@ def test_has_environment_roles():
}
portfolio = PortfolioFactory.create(owner=owner)
portfolio_role = Portfolios.create_member(owner, portfolio, developer_data)
portfolio_role = Portfolios.create_member(portfolio, developer_data)
application = Applications.create(
owner,
portfolio,
"my test application",
"It's mine.",
["dev", "staging", "prod"],
portfolio, "my test application", "It's mine.", ["dev", "staging", "prod"]
)
Environments.add_member(
application.environments[0], portfolio_role.user, "developer"

View File

@@ -130,7 +130,6 @@ def test_creating_application(client, user_session):
def test_view_edit_application(client, user_session):
portfolio = PortfolioFactory.create()
application = Applications.create(
portfolio.owner,
portfolio,
"Snazzy Application",
"A new application for me and my friends",

View File

@@ -168,7 +168,6 @@ def test_update_member_environment_role(client, user_session):
user = UserFactory.create()
member = PortfolioRoles.add(user, portfolio.id)
application = Applications.create(
portfolio.owner,
portfolio,
"Snazzy Application",
"A new application for me and my friends",
@@ -202,7 +201,6 @@ def test_update_member_environment_role_with_no_data(client, user_session):
user = UserFactory.create()
member = PortfolioRoles.add(user, portfolio.id)
application = Applications.create(
portfolio.owner,
portfolio,
"Snazzy Application",
"A new application for me and my friends",
@@ -231,7 +229,6 @@ def test_revoke_active_member_access(client, user_session):
portfolio=portfolio, user=user, status=PortfolioRoleStatus.ACTIVE
)
Applications.create(
portfolio.owner,
portfolio,
"Snazzy Application",
"A new application for me and my friends",

View File

@@ -157,7 +157,7 @@ class TestTaskOrderInvitations:
"security_officer-last_name": "Fett",
},
)
updated_task_order = TaskOrders.get(self.portfolio.owner, self.task_order.id)
updated_task_order = TaskOrders.get(self.task_order.id)
assert updated_task_order.ko_first_name == "Luke"
assert updated_task_order.ko_last_name == "Skywalker"
assert updated_task_order.so_first_name == "Boba"
@@ -189,7 +189,7 @@ class TestTaskOrderInvitations:
"contracting_officer-invite": "y",
},
)
updated_task_order = TaskOrders.get(self.portfolio.owner, self.task_order.id)
updated_task_order = TaskOrders.get(self.task_order.id)
assert updated_task_order.ko_invite == True
assert updated_task_order.ko_first_name == "Luke"
@@ -222,7 +222,7 @@ class TestTaskOrderInvitations:
assert "There were some errors" in response.data.decode()
updated_task_order = TaskOrders.get(self.portfolio.owner, self.task_order.id)
updated_task_order = TaskOrders.get(self.task_order.id)
assert updated_task_order.so_first_name != "Boba"
assert len(queue.get_queue()) == queue_length
assert response.status_code == 400
@@ -251,7 +251,7 @@ def test_ko_can_view_task_order(client, user_session, portfolio, user):
assert response.status_code == 200
assert translate("common.manage") in response.data.decode()
TaskOrders.update(user, task_order, clin_01=None)
TaskOrders.update(task_order, clin_01=None)
response = client.get(
url_for(
"portfolios.view_task_order",
@@ -706,20 +706,21 @@ def test_resending_revoked_invite(app, client, user_session, portfolio, user):
assert response.status_code == 404
def test_resending_expired_invite(app, client, user_session, portfolio, user):
def test_resending_expired_invite(app, client, user_session, portfolio):
queue_length = len(queue.get_queue())
ko = UserFactory.create()
task_order = TaskOrderFactory.create(
portfolio=portfolio, contracting_officer=user, ko_invite=True
portfolio=portfolio, contracting_officer=ko, ko_invite=True
)
portfolio_role = PortfolioRoleFactory.create(portfolio=portfolio, user=user)
portfolio_role = PortfolioRoleFactory.create(portfolio=portfolio, user=ko)
invite = InvitationFactory.create(
inviter=user,
inviter=portfolio.owner,
portfolio_role=portfolio_role,
email=user.email,
email=ko.email,
expiration_time=datetime.now() - timedelta(days=1),
)
user_session(user)
user_session(portfolio.owner)
response = client.post(
url_for(

View File

@@ -118,7 +118,7 @@ def test_create_new_task_order(client, user_session, pdf_upload):
assert url_for("task_orders.new", screen=2) in response.headers["Location"]
created_task_order_id = response.headers["Location"].split("/")[-1]
created_task_order = TaskOrders.get(creator, created_task_order_id)
created_task_order = TaskOrders.get(created_task_order_id)
assert created_task_order.portfolio is not None
assert created_task_order.portfolio.name == portfolio_name
assert created_task_order.portfolio.defense_component == defense_component
@@ -156,7 +156,7 @@ def test_create_new_task_order_for_portfolio(client, user_session):
assert url_for("task_orders.new", screen=2) in response.headers["Location"]
created_task_order_id = response.headers["Location"].split("/")[-1]
created_task_order = TaskOrders.get(creator, created_task_order_id)
created_task_order = TaskOrders.get(created_task_order_id)
assert created_task_order.portfolio_name == portfolio.name
assert created_task_order.defense_component == portfolio.defense_component
assert created_task_order.portfolio == portfolio
@@ -213,7 +213,7 @@ def test_review_screen_when_all_sections_complete(client, user_session, task_ord
def test_review_screen_when_not_all_sections_complete(client, user_session, task_order):
TaskOrders.update(task_order.creator, task_order, clin_01=None)
TaskOrders.update(task_order, clin_01=None)
user_session(task_order.creator)
response = client.get(
url_for("task_orders.new", screen=4, task_order_id=task_order.id)

View File

@@ -18,10 +18,7 @@ def create_ko_task_order(user_session, contracting_officer):
)
TaskOrders.add_officer(
contracting_officer,
task_order,
"contracting_officer",
contracting_officer.to_dictionary(),
task_order, "contracting_officer", contracting_officer.to_dictionary()
)
dd_254 = DD254Factory.create()
@@ -33,7 +30,7 @@ def create_ko_task_order(user_session, contracting_officer):
def test_show_signature_requested_not_ko(client, user_session):
contracting_officer = UserFactory.create()
task_order = create_ko_task_order(user_session, contracting_officer)
TaskOrders.update(contracting_officer, task_order, contracting_officer=None)
TaskOrders.update(task_order, contracting_officer=None)
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
@@ -50,10 +47,7 @@ def test_show_signature_requested(client, user_session):
# create unfinished TO
task_order = TaskOrderFactory.create(portfolio=portfolio, clin_01=None)
TaskOrders.add_officer(
contracting_officer,
task_order,
"contracting_officer",
contracting_officer.to_dictionary(),
task_order, "contracting_officer", contracting_officer.to_dictionary()
)
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
@@ -61,7 +55,7 @@ def test_show_signature_requested(client, user_session):
assert response.status_code == 404
# Finish TO
TaskOrders.update(contracting_officer, task_order, clin_01=100)
TaskOrders.update(task_order, clin_01=100)
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
)
@@ -79,9 +73,7 @@ def test_show_signature_requested(client, user_session):
def test_show_signature_requested_already_signed(client, user_session):
contracting_officer = UserFactory.create()
task_order = create_ko_task_order(user_session, contracting_officer)
TaskOrders.update(
contracting_officer, task_order, signer_dod_id=contracting_officer.dod_id
)
TaskOrders.update(task_order, signer_dod_id=contracting_officer.dod_id)
response = client.get(
url_for("task_orders.signature_requested", task_order_id=task_order.id)
@@ -93,7 +85,7 @@ def test_show_signature_requested_already_signed(client, user_session):
def test_signing_task_order_not_ko(client, user_session):
contracting_officer = UserFactory.create()
task_order = create_ko_task_order(user_session, contracting_officer)
TaskOrders.update(contracting_officer, task_order, contracting_officer=None)
TaskOrders.update(task_order, contracting_officer=None)
response = client.post(
url_for("task_orders.record_signature", task_order_id=task_order.id), data={}
@@ -105,9 +97,7 @@ def test_signing_task_order_not_ko(client, user_session):
def test_singing_an_already_signed_task_order(client, user_session):
contracting_officer = UserFactory.create()
task_order = create_ko_task_order(user_session, contracting_officer)
TaskOrders.update(
contracting_officer, task_order, signer_dod_id=contracting_officer.dod_id
)
TaskOrders.update(task_order, signer_dod_id=contracting_officer.dod_id)
response = client.post(
url_for("task_orders.record_signature", task_order_id=task_order.id),

View File

@@ -8,18 +8,18 @@ import atst.domain.authz as authz
from tests.factories import UserFactory
_NO_ACCESS_CHECK_REQUIRED = _NO_LOGIN_REQUIRED + [
"task_orders.get_started",
"atst.csp_environment_access",
"atst.jedi_csp_calculator",
"atst.styleguide",
"dev.test_email",
"dev.messages",
"atst.home",
"users.user",
"users.update_user",
"portfolios.accept_invitation",
"atst.catch_all",
"portfolios.portfolios",
"task_orders.get_started", # all users can start a new TO
"atst.csp_environment_access", # internal redirect
"atst.jedi_csp_calculator", # internal redirect
"atst.styleguide", # dev reference
"dev.test_email", # dev tool
"dev.messages", # dev tool
"atst.home", # available to all users
"users.user", # available to all users
"users.update_user", # available to all users
"portfolios.accept_invitation", # available to all users; access control is built into invitation logic
"atst.catch_all", # available to all users
"portfolios.portfolios", # the portfolios list is scoped to the user separately
]
@@ -38,10 +38,19 @@ def protected_routes(app):
return _protected_routes
_PROTECTED_ROUTES = protected_routes(make_app(make_config()))
sample_config = make_config()
sample_app = make_app(sample_config)
_PROTECTED_ROUTES = protected_routes(sample_app)
class Null:
"""
Very simple null object. Will return itself for all attribute
calls:
> foo = Null()
> foo.bar.baz == foo
"""
def __init__(self, *args, **kwargs):
pass
@@ -53,10 +62,18 @@ class Null:
def test_all_protected_routes_have_access_control(
rule, route, mocker, client, user_session, monkeypatch
):
"""
This tests that all routes, except the ones in
_NO_ACCESS_CHECK_REQUIRED, are protected by the access
decorator.
"""
# monkeypatch any object lookups that might happen in the access decorator
monkeypatch.setattr("atst.domain.portfolios.Portfolios.for_user", lambda *a: [])
monkeypatch.setattr("atst.domain.portfolios.Portfolios.get", lambda *a: None)
monkeypatch.setattr("atst.domain.task_orders.TaskOrders.get", lambda *a: Null())
# patch the two internal functions the access decorator uses so
# that we can check that one or the other was called
mocker.patch("atst.domain.authz.decorator.user_can_access")
mocker.patch("atst.domain.authz.decorator.evaluate_exceptions")