In the future, an `application_invitation1 will not refer to a `user` until someone accepts the invitation; they'll only reference an `application_role`. When a user is invited to an application, the inviter can specify the environments the invitee should have access to. For this to be possible, an `environment_role` should reference an `application_role`, because no `user` entity will be known at that time. In addition to updating all the models and domain methods necessary for this change, this commit deletes unused code and tests that were dependent on `environment_roles` having a `user_id` foreign key.
120 lines
4.3 KiB
Python
120 lines
4.3 KiB
Python
import pytest
|
|
|
|
from atst.domain.applications import Applications
|
|
from atst.domain.audit_log import AuditLog
|
|
from atst.domain.exceptions import UnauthorizedError
|
|
from atst.domain.permission_sets import PermissionSets
|
|
from atst.domain.portfolios import Portfolios
|
|
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
|
from tests.factories import (
|
|
ApplicationFactory,
|
|
ApplicationInvitationFactory,
|
|
ApplicationRoleFactory,
|
|
EnvironmentFactory,
|
|
EnvironmentRoleFactory,
|
|
PortfolioFactory,
|
|
PortfolioRoleFactory,
|
|
UserFactory,
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def ccpo():
|
|
return UserFactory.create_ccpo()
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def developer():
|
|
return UserFactory.create()
|
|
|
|
|
|
def test_paginate_audit_log():
|
|
user = UserFactory.create()
|
|
for _ in range(100):
|
|
AuditLog.log_system_event(user, action="create")
|
|
|
|
events = AuditLog.get_all_events(pagination_opts={"per_page": 25, "page": 2})
|
|
assert len(events) == 25
|
|
|
|
|
|
def test_paginate_ws_audit_log():
|
|
portfolio = PortfolioFactory.create()
|
|
application = ApplicationFactory.create(portfolio=portfolio)
|
|
for _ in range(100):
|
|
AuditLog.log_system_event(
|
|
resource=application, action="create", portfolio=portfolio
|
|
)
|
|
|
|
events = AuditLog.get_portfolio_events(
|
|
portfolio, pagination_opts={"per_page": 25, "page": 2}
|
|
)
|
|
assert len(events) == 25
|
|
|
|
|
|
def test_portfolio_audit_log_only_includes_current_portfolio_events():
|
|
owner = UserFactory.create()
|
|
portfolio = PortfolioFactory.create(owner=owner)
|
|
other_portfolio = PortfolioFactory.create(owner=owner)
|
|
# Add some audit events
|
|
application_1 = ApplicationFactory.create(portfolio=portfolio)
|
|
application_2 = ApplicationFactory.create(portfolio=other_portfolio)
|
|
|
|
events = AuditLog.get_portfolio_events(portfolio)
|
|
for event in events:
|
|
assert event.portfolio_id == portfolio.id
|
|
assert (
|
|
not event.portfolio_id == other_portfolio.id
|
|
or event.resource_id == other_portfolio.id
|
|
)
|
|
|
|
|
|
def test_get_portfolio_events_includes_app_and_env_events():
|
|
owner = UserFactory.create()
|
|
# add portfolio level events
|
|
portfolio = PortfolioFactory.create(owner=owner)
|
|
portfolio_events = AuditLog.get_portfolio_events(portfolio)
|
|
|
|
# add application level events
|
|
application = ApplicationFactory.create(portfolio=portfolio)
|
|
Applications.update(application, {"name": "Star Cruiser"})
|
|
app_role = ApplicationRoleFactory.create(application=application)
|
|
app_invite = ApplicationInvitationFactory.create(role=app_role)
|
|
portfolio_and_app_events = AuditLog.get_portfolio_events(portfolio)
|
|
assert len(portfolio_events) < len(portfolio_and_app_events)
|
|
|
|
# add environment level events
|
|
env = EnvironmentFactory.create(application=application)
|
|
env_role = EnvironmentRoleFactory.create(environment=env, application_role=app_role)
|
|
portfolio_app_and_env_events = AuditLog.get_portfolio_events(portfolio)
|
|
assert len(portfolio_and_app_events) < len(portfolio_app_and_env_events)
|
|
|
|
resource_types = [event.resource_type for event in portfolio_app_and_env_events]
|
|
assert "application" in resource_types
|
|
assert "application_role" in resource_types
|
|
assert "application_invitation" in resource_types
|
|
assert "environment" in resource_types
|
|
assert "environment_role" in resource_types
|
|
|
|
|
|
def test_get_application_events():
|
|
# add in some portfolio level events
|
|
portfolio = PortfolioFactory.create()
|
|
Portfolios.update(portfolio, {"name": "New Name"})
|
|
# add app level events
|
|
application = ApplicationFactory.create(portfolio=portfolio)
|
|
Applications.update(application, {"name": "Star Cruiser"})
|
|
app_role = ApplicationRoleFactory.create(application=application)
|
|
app_invite = ApplicationInvitationFactory.create(role=app_role)
|
|
env = EnvironmentFactory.create(application=application)
|
|
env_role = EnvironmentRoleFactory.create(environment=env, application_role=app_role)
|
|
# add rando app
|
|
rando_app = ApplicationFactory.create(portfolio=portfolio)
|
|
|
|
events = AuditLog.get_application_events(application)
|
|
for event in events:
|
|
assert event.application_id == application.id
|
|
assert not event.application_id == rando_app.id
|
|
|
|
resource_types = [event.resource_type for event in events]
|
|
assert "portfolio" not in resource_types
|