From 9f90f5abbdb40acc227e9807bc570956c4955b6f Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Mon, 18 Nov 2019 16:43:53 -0500 Subject: [PATCH] Update app member status labels to accurately reflect member's current status --- atst/models/application_role.py | 8 +++++ atst/models/environment_role.py | 4 +++ atst/routes/applications/new.py | 1 + atst/routes/applications/settings.py | 30 ++++++++++++++++++- styles/elements/_labels.scss | 4 +++ templates/applications/fragments/members.html | 21 +++++++------ templates/components/label.html | 4 +-- tests/factories.py | 12 +++++++- tests/routes/applications/test_settings.py | 12 ++++---- 9 files changed, 76 insertions(+), 20 deletions(-) diff --git a/atst/models/application_role.py b/atst/models/application_role.py index 9468896c..e6939958 100644 --- a/atst/models/application_role.py +++ b/atst/models/application_role.py @@ -102,6 +102,14 @@ class ApplicationRole( "portfolio": self.application.portfolio.name, } + @property + def is_pending(self): + return self.status == Status.PENDING + + @property + def is_active(self): + return self.status == Status.ACTIVE + Index( "application_role_user_application", diff --git a/atst/models/environment_role.py b/atst/models/environment_role.py index 37d1c17c..541b6d40 100644 --- a/atst/models/environment_role.py +++ b/atst/models/environment_role.py @@ -70,6 +70,10 @@ class EnvironmentRole( def disabled(self): return self.status == EnvironmentRole.Status.DISABLED + @property + def is_pending(self): + return self.status == EnvironmentRole.Status.PENDING + @property def event_details(self): return { diff --git a/atst/routes/applications/new.py b/atst/routes/applications/new.py index a1a1a54c..00aac3f5 100644 --- a/atst/routes/applications/new.py +++ b/atst/routes/applications/new.py @@ -153,6 +153,7 @@ def view_new_application_step_3(application_id): application=application, members=members, new_member_form=new_member_form, + label_info=LABEL_INFO, ) diff --git a/atst/routes/applications/settings.py b/atst/routes/applications/settings.py index 3454c30e..fc8ef711 100644 --- a/atst/routes/applications/settings.py +++ b/atst/routes/applications/settings.py @@ -21,6 +21,19 @@ from atst.utils.localization import translate from atst.jobs import send_mail +LABEL_INFO = { + "pending": {"icon": "envelope", "text": "invite pending", "type": "success",}, + "expired": {"icon": "envelope", "text": "invite expired", "type": "error",}, + "env_changes_pending": { + "icon": "exchange", + "text": "changes pending", + "type": "default", + }, + "active": None, + "disabled": None, +} + + def get_environments_obj_for_app(application): return sorted( [ @@ -98,6 +111,20 @@ def filter_env_roles_form_data(member, environments): return env_roles_form_data +def get_app_role_status(app_role): + status = app_role.status.value + + if app_role.is_pending and app_role.latest_invitation.is_expired: + status = "expired" + + if app_role.is_active and any( + env_role.is_pending for env_role in app_role.environment_roles + ): + status = "env_changes_pending" + + return status + + def get_members_data(application): members_data = [] for member in application.members: @@ -122,7 +149,7 @@ def get_members_data(application): "user_name": member.user_name, "permission_sets": permission_sets, "environment_roles": environment_roles, - "role_status": member.status.value, + "role_status": get_app_role_status(member), "form": form, "update_invite_form": update_invite_form, } @@ -164,6 +191,7 @@ def render_settings_page(application, **kwargs): audit_events=audit_events, new_member_form=new_member_form, members=members, + label_info=LABEL_INFO, **kwargs, ) diff --git a/styles/elements/_labels.scss b/styles/elements/_labels.scss index d36ae027..8c044f8d 100644 --- a/styles/elements/_labels.scss +++ b/styles/elements/_labels.scss @@ -20,6 +20,10 @@ white-space: nowrap; text-transform: uppercase; + &--default { + background-color: $color-gray-dark; + } + &--info { background-color: $color-primary; } diff --git a/templates/applications/fragments/members.html b/templates/applications/fragments/members.html index 825dba25..b3ec0c35 100644 --- a/templates/applications/fragments/members.html +++ b/templates/applications/fragments/members.html @@ -52,7 +52,7 @@ {% endcall %} - {%- if member.role_status == 'pending' %} + {%- if member.role_status == 'pending' or member.role_status == 'expired' %} {% set resend_invite_modal = "resend_invite-{}".format(member.role_id) %} {% call Modal(resend_invite_modal, classes="form-content--app-mem") %}