From 4c7a8c399c99dc7d1947a5beee824a7427993783 Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Fri, 26 Apr 2019 10:48:58 -0400 Subject: [PATCH] Sort env members by role --- atst/routes/applications/settings.py | 27 ++++++++++++----- tests/routes/applications/test_settings.py | 34 +++++++++++++--------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/atst/routes/applications/settings.py b/atst/routes/applications/settings.py index 66ea8075..4eb66323 100644 --- a/atst/routes/applications/settings.py +++ b/atst/routes/applications/settings.py @@ -7,26 +7,37 @@ from atst.domain.applications import Applications from atst.forms.app_settings import EnvironmentRolesForm from atst.forms.application import ApplicationForm, EditEnvironmentForm from atst.domain.authz.decorator import user_can_access_decorator as user_can +from atst.models.environment_role import CSPRole from atst.models.permissions import Permissions from atst.utils.flash import formatted_flash as flash def get_environments_obj_for_app(application): environments_obj = {} - for env in application.environments: environments_obj[env.name] = { "edit_form": EditEnvironmentForm(obj=env), "id": env.id, - "members": [], } - for user in env.users: - env_role = EnvironmentRoles.get(user.id, env.id) - environments_obj[env.name]["members"].append( - {"name": user.full_name, "role": env_role.displayname} - ) + + environments_obj[env.name]["members"] = sort_env_users_by_role(env) return environments_obj + # {env_name: {edit_form, env_id, members: {csp_role: [], csp_role: []}}} + + +def sort_env_users_by_role(env): + users_dict = {} + for role in CSPRole: + users_dict[role.value] = [] + + for r in env.roles: + users_dict[r.displayname].append( + {"name": r.user.full_name, "user_id": r.user_id} + ) + + return users_dict + # {csp_role: [{user info}, {user info}], csp_role: [...]} def serialize_env_member_forms(application): @@ -64,6 +75,7 @@ def settings(application_id): # refactor like portfolio admin render function application = Applications.get(application_id) form = ApplicationForm(name=application.name, description=application.description) + csp_roles = [role.value for role in CSPRole] return render_template( "portfolios/applications/settings.html", @@ -71,6 +83,7 @@ def settings(application_id): form=form, environments_obj=get_environments_obj_for_app(application=application), env_forms=serialize_env_member_forms(application=application), + csp_roles=csp_roles, ) diff --git a/tests/routes/applications/test_settings.py b/tests/routes/applications/test_settings.py index 18ffd06d..7a4608e7 100644 --- a/tests/routes/applications/test_settings.py +++ b/tests/routes/applications/test_settings.py @@ -68,15 +68,17 @@ def test_edit_application_environments_obj(app, client, user_session): portfolio, "Snazzy Application", "A new application for me and my friends", - {"env1", "env2"}, + {"env"}, ) 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) + env = application.environments[0] + env_role1 = EnvironmentRoleFactory.create( + environment=env, user=user1, role=CSPRole.BASIC_ACCESS.value + ) + env_role2 = EnvironmentRoleFactory.create( + environment=env, user=user2, role=CSPRole.NETWORK_ADMIN.value + ) user_session(portfolio.owner) @@ -88,13 +90,19 @@ def test_edit_application_environments_obj(app, client, user_session): assert response.status_code == 200 _, context = templates[0] - env_obj_1 = context["environments_obj"][env1.name] - assert env_obj_1["id"] == env1.id - assert isinstance(env_obj_1["edit_form"], EditEnvironmentForm) - assert env_obj_1["members"] == [ - {"name": user1.full_name, "role": env_role1.role}, - {"name": user2.full_name, "role": env_role2.role}, - ] + env_obj = context["environments_obj"][env.name] + assert env_obj["id"] == env.id + assert isinstance(env_obj["edit_form"], EditEnvironmentForm) + assert env_obj["members"] == { + CSPRole.BASIC_ACCESS.value: [ + {"name": env_role1.user.full_name, "user_id": env_role1.user_id} + ], + CSPRole.NETWORK_ADMIN.value: [ + {"name": env_role2.user.full_name, "user_id": env_role2.user_id} + ], + CSPRole.BUSINESS_READ.value: [], + CSPRole.TECHNICAL_READ.value: [], + } def test_edit_app_serialize_env_member_form_data(app, client, user_session):