From fbd9c9db66e565b0f6c7dc54ea2f789e8c35534e Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Thu, 18 Apr 2019 15:24:48 -0400 Subject: [PATCH] Create form in view route for application settings --- atst/routes/applications/settings.py | 23 ++++++++++++ tests/factories.py | 3 +- tests/routes/applications/test_settings.py | 43 ++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/atst/routes/applications/settings.py b/atst/routes/applications/settings.py index 8ef290d6..fe398146 100644 --- a/atst/routes/applications/settings.py +++ b/atst/routes/applications/settings.py @@ -4,6 +4,7 @@ from . import applications_bp from atst.domain.environment_roles import EnvironmentRoles from atst.domain.applications import Applications from atst.forms.application import ApplicationForm +from atst.forms.app_settings import EnvironmentForm from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.models.permissions import Permissions from atst.utils.flash import formatted_flash as flash @@ -23,17 +24,39 @@ def get_environments_obj_for_app(application): return environments_obj +def serialize_env_member_form_data(application): + environments_list = [] + for env in application.environments: + env_info = {"env_id": env.id, "team_roles": []} + for user in env.users: + env_role = EnvironmentRoles.get(user.id, env.id) + env_info["team_roles"].append( + { + "name": user.full_name, + "user_id": user.id, + "role": env_role.displayname, + } + ) + environments_list.append(env_info) + return environments_list + + @applications_bp.route("/applications//settings") @user_can(Permissions.VIEW_APPLICATION, message="view application edit form") def settings(application_id): application = Applications.get(application_id) form = ApplicationForm(name=application.name, description=application.description) + env_data = serialize_env_member_form_data(application) + env_forms = {} + for data in env_data: + env_forms[data["env_id"]] = EnvironmentForm(data=data) return render_template( "portfolios/applications/edit.html", application=application, form=form, environments_obj=get_environments_obj_for_app(application=application), + env_forms=env_forms, ) diff --git a/tests/factories.py b/tests/factories.py index 29dc7fa0..12b4f62b 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -10,6 +10,7 @@ from atst.models import * from atst.models.portfolio_role import Status as PortfolioRoleStatus from atst.models.application_role import Status as ApplicationRoleStatus from atst.models.invitation import Status as InvitationStatus +from atst.models.environment_role import CSPRole from atst.domain.invitations import Invitations from atst.domain.permission_sets import PermissionSets from atst.domain.portfolio_roles import PortfolioRoles @@ -234,7 +235,7 @@ class EnvironmentRoleFactory(Base): model = EnvironmentRole environment = factory.SubFactory(EnvironmentFactory) - role = factory.Faker("name") + role = random.choice([e.value for e in CSPRole]) user = factory.SubFactory(UserFactory) diff --git a/tests/routes/applications/test_settings.py b/tests/routes/applications/test_settings.py index f6f2b5db..b0f4d427 100644 --- a/tests/routes/applications/test_settings.py +++ b/tests/routes/applications/test_settings.py @@ -10,6 +10,8 @@ from tests.factories import ( ) from atst.domain.applications import Applications +from atst.domain.environment_roles import EnvironmentRoles +from atst.domain.environments import Environments from atst.domain.portfolios import Portfolios from atst.models.portfolio_role import Status as PortfolioRoleStatus @@ -65,6 +67,47 @@ def test_edit_application_environments_obj(app, client, user_session): } +def test_edit_app_serialize_env_member_form_data(app, client, user_session): + portfolio = PortfolioFactory.create() + application = Applications.create( + portfolio, + "Snazzy Application", + "A new application for me and my friends", + {"env1", "env2"}, + ) + user1 = UserFactory.create() + user2 = UserFactory.create() + env1 = application.environments[0] + env2 = application.environments[1] + env_role1 = EnvironmentRoleFactory.create(environment=env1, user=user1) + env_role2 = EnvironmentRoleFactory.create(environment=env1, user=user2) + env_role3 = EnvironmentRoleFactory.create(environment=env2, user=user1) + + user_session(portfolio.owner) + + with captured_templates(app) as templates: + response = app.test_client().get( + url_for("applications.settings", application_id=application.id) + ) + + assert response.status_code == 200 + _, context = templates[0] + for env_id in context["env_forms"]: + env = Environments.get(environment_id=env_id) + form_data = {"env_id": env_id, "team_roles": []} + for user in env.users: + env_role = EnvironmentRoles.get(user.id, env.id) + form_data["team_roles"].append( + { + "name": user.full_name, + "user_id": user.id, + "role": env_role.displayname, + } + ) + + assert context["env_forms"][env_id].data == form_data + + def test_user_with_permission_can_update_application(client, user_session): owner = UserFactory.create() portfolio = PortfolioFactory.create(