Route for adding new application member
- domain method for creating a new application member - ApplicationInvitations domain class - nested form for adding a new user that holds user data, application permission sets, and environment roles - Invitation service can infer invitation type based on role it's given - new invitation email templates
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import pytest
|
||||
from uuid import uuid4
|
||||
|
||||
from atst.models import CSPRole
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
|
||||
from tests.factories import (
|
||||
@@ -100,3 +102,29 @@ def test_delete_application(session):
|
||||
|
||||
# changes are flushed
|
||||
assert not session.dirty
|
||||
|
||||
|
||||
def test_create_member():
|
||||
application = ApplicationFactory.create()
|
||||
env1 = EnvironmentFactory.create(application=application)
|
||||
env2 = EnvironmentFactory.create(application=application)
|
||||
user_data = UserFactory.dictionary()
|
||||
permission_set_names = [PermissionSets.EDIT_APPLICATION_TEAM]
|
||||
|
||||
member_role = Applications.create_member(
|
||||
application,
|
||||
user_data,
|
||||
permission_set_names,
|
||||
environment_roles_data=[
|
||||
{"environment_id": env1.id, "role": CSPRole.BASIC_ACCESS.value},
|
||||
{"environment_id": env2.id, "role": None},
|
||||
],
|
||||
)
|
||||
|
||||
assert member_role.user.dod_id == user_data["dod_id"]
|
||||
# view application AND edit application team
|
||||
assert len(member_role.permission_sets) == 2
|
||||
|
||||
env_roles = member_role.user.environment_roles
|
||||
assert len(env_roles) == 1
|
||||
assert env_roles[0].environment == env1
|
||||
|
@@ -1,6 +1,6 @@
|
||||
from flask import url_for
|
||||
|
||||
from tests.factories import PortfolioFactory, ApplicationFactory
|
||||
from tests.factories import PortfolioFactory, ApplicationFactory, UserFactory
|
||||
|
||||
|
||||
def test_application_team(client, user_session):
|
||||
@@ -12,3 +12,43 @@ def test_application_team(client, user_session):
|
||||
response = client.get(url_for("applications.team", application_id=application.id))
|
||||
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
def test_create_member(client, user_session):
|
||||
user = UserFactory.create()
|
||||
application = ApplicationFactory.create(
|
||||
environments=[{"name": "Naboo"}, {"name": "Endor"}]
|
||||
)
|
||||
env = application.environments[0]
|
||||
|
||||
user_session(application.portfolio.owner)
|
||||
|
||||
response = client.post(
|
||||
url_for("applications.create_member", application_id=application.id),
|
||||
data={
|
||||
"user_data-first_name": user.first_name,
|
||||
"user_data-last_name": user.last_name,
|
||||
"user_data-dod_id": user.dod_id,
|
||||
"user_data-email": user.email,
|
||||
"environment_roles-0-environment_id": env.id,
|
||||
"environment_roles-0-environment_name": env.name,
|
||||
"environment_roles-0-role": "Basic Access",
|
||||
"permission_sets-perms_env_mgmt": True,
|
||||
"permission_sets-perms_team_mgmt": True,
|
||||
"permission_sets-perms_del_env": True,
|
||||
},
|
||||
)
|
||||
|
||||
assert response.status_code == 302
|
||||
expected_url = url_for(
|
||||
"applications.team",
|
||||
application_id=application.id,
|
||||
fragment="application-members",
|
||||
_anchor="application-members",
|
||||
_external=True,
|
||||
)
|
||||
assert response.location == expected_url
|
||||
assert len(user.application_roles) == 1
|
||||
assert user.application_roles[0].application == application
|
||||
assert len(user.environment_roles) == 1
|
||||
assert user.environment_roles[0].environment == env
|
||||
|
@@ -1,9 +1,15 @@
|
||||
from tests.factories import UserFactory, PortfolioFactory, PortfolioRoleFactory
|
||||
from tests.factories import (
|
||||
ApplicationFactory,
|
||||
ApplicationRoleFactory,
|
||||
UserFactory,
|
||||
PortfolioFactory,
|
||||
PortfolioRoleFactory,
|
||||
)
|
||||
|
||||
from atst.services.invitation import Invitation
|
||||
|
||||
|
||||
def test_invite_member(queue):
|
||||
def test_invite_portfolio_member(queue):
|
||||
inviter = UserFactory.create()
|
||||
new_member = UserFactory.create()
|
||||
portfolio = PortfolioFactory.create(owner=inviter)
|
||||
@@ -12,3 +18,14 @@ def test_invite_member(queue):
|
||||
new_invitation = invite_service.invite()
|
||||
assert new_invitation == new_member.portfolio_invitations[0]
|
||||
assert len(queue.get_queue()) == 1
|
||||
|
||||
|
||||
def test_invite_application_member(queue):
|
||||
inviter = UserFactory.create()
|
||||
new_member = UserFactory.create()
|
||||
application = ApplicationFactory.create()
|
||||
member = ApplicationRoleFactory.create(user=new_member, application=application)
|
||||
invite_service = Invitation(inviter, member, new_member.email)
|
||||
new_invitation = invite_service.invite()
|
||||
assert new_invitation == new_member.application_invitations[0]
|
||||
assert len(queue.get_queue()) == 1
|
||||
|
Reference in New Issue
Block a user