Update role div height

Move serialization into the route
change member.role to member.role_name in form and route
Return 400 for invalid form submission
This commit is contained in:
leigh-mil 2019-05-13 11:29:24 -04:00
parent fd84e902e3
commit 546e04555d
6 changed files with 51 additions and 65 deletions

View File

@ -98,7 +98,7 @@ class Environments(object):
environment = Environments.get(environment_id) environment = Environments.get(environment_id)
for member in team_roles: for member in team_roles:
new_role = member["role"] new_role = member["role_name"]
user = Users.get(member["user_id"]) user = Users.get(member["user_id"])
Environments.update_env_role( Environments.update_env_role(
environment=environment, user=user, new_role=new_role environment=environment, user=user, new_role=new_role
@ -115,25 +115,13 @@ class Environments(object):
@classmethod @classmethod
def get_members_by_role(cls, env, role): def get_members_by_role(cls, env, role):
env_roles = ( return (
db.session.query(EnvironmentRole) db.session.query(EnvironmentRole)
.filter(EnvironmentRole.environment_id == env.id) .filter(EnvironmentRole.environment_id == env.id)
.filter(EnvironmentRole.role == role) .filter(EnvironmentRole.role == role)
.all() .all()
) )
members_list = []
for env_role in env_roles:
members_list.append(
{
"user_id": str(env_role.user_id),
"user_name": env_role.user.full_name,
"role": role,
}
)
return members_list
@classmethod @classmethod
def revoke_access(cls, environment, target_user): def revoke_access(cls, environment, target_user):
EnvironmentRoles.delete(environment.id, target_user.id) EnvironmentRoles.delete(environment.id, target_user.id)

View File

@ -8,14 +8,13 @@ from .data import ENV_ROLES
class MemberForm(FlaskForm): class MemberForm(FlaskForm):
user_id = HiddenField() user_id = HiddenField()
user_name = StringField() user_name = StringField()
role = RadioField(choices=ENV_ROLES, default="no_access") role_name = RadioField(choices=ENV_ROLES, default="no_access")
@property @property
def data(self): def data(self):
_data = super().data _data = super().data
for field in _data: if "role_name" in _data and _data["role_name"] == "no_access":
if field == "role" and _data[field] == "no_access": _data["role_name"] = None
_data[field] = None
return _data return _data

View File

@ -27,11 +27,26 @@ def get_environments_obj_for_app(application):
return environments_obj return environments_obj
def serialize_members(member_list, role):
serialized_list = []
for member in member_list:
serialized_list.append(
{
"user_id": str(member.user_id),
"user_name": member.user.full_name,
"role_name": role,
}
)
return serialized_list
def sort_env_users_by_role(env): def sort_env_users_by_role(env):
users_list = [] users_list = []
no_access_users = env.application.users - env.users no_access_users = env.application.users - env.users
no_access_list = [ no_access_list = [
{"user_id": str(user.id), "user_name": user.full_name, "role": "no_access"} {"user_id": str(user.id), "user_name": user.full_name, "role_name": "no_access"}
for user in no_access_users for user in no_access_users
] ]
users_list.append({"role": "no_access", "members": no_access_list}) users_list.append({"role": "no_access", "members": no_access_list})
@ -40,7 +55,9 @@ def sort_env_users_by_role(env):
users_list.append( users_list.append(
{ {
"role": role.value, "role": role.value,
"members": Environments.get_members_by_role(env, role.value), "members": serialize_members(
Environments.get_members_by_role(env, role.value), role.value
),
} }
) )
@ -196,18 +213,18 @@ def update_env_roles(environment_id):
) )
) )
else: else:
# TODO: Create a better pattern to handle when a form doesn't validate return (
# if a user is submitting the data via the web page then they render_template(
# should never have any form validation errors "portfolios/applications/settings.html",
return render_template( application=application,
"portfolios/applications/settings.html", form=ApplicationForm(
application=application, name=application.name, description=application.description
form=ApplicationForm( ),
name=application.name, description=application.description environments_obj=get_environments_obj_for_app(application=application),
active_toggler=environment.id,
active_toggler_section="edit",
), ),
environments_obj=get_environments_obj_for_app(application=application), 400,
active_toggler=environment.id,
active_toggler_section="edit",
) )

View File

@ -54,6 +54,7 @@
white-space: nowrap; white-space: nowrap;
width: 20rem; width: 20rem;
position: relative; position: relative;
height: 3.6rem;
&.unassigned { &.unassigned {
border: solid 1px $color-gray-light; border: solid 1px $color-gray-light;
@ -88,6 +89,7 @@
margin: $gap; margin: $gap;
padding: ($gap / 2) $gap; padding: ($gap / 2) $gap;
font-weight: $font-normal; font-weight: $font-normal;
height: 3.6rem;
} }
} }
} }

View File

@ -79,18 +79,18 @@ def test_update_env_roles_by_environment():
team_roles = [ team_roles = [
{ {
"user_id": env_role_1.user.id, "user_id": env_role_1.user.id,
"name": env_role_1.user.full_name, "user_name": env_role_1.user.full_name,
"role": CSPRole.BUSINESS_READ.value, "role_name": CSPRole.BUSINESS_READ.value,
}, },
{ {
"user_id": env_role_2.user.id, "user_id": env_role_2.user.id,
"name": env_role_2.user.full_name, "user_name": env_role_2.user.full_name,
"role": CSPRole.NETWORK_ADMIN.value, "role_name": CSPRole.NETWORK_ADMIN.value,
}, },
{ {
"user_id": env_role_3.user.id, "user_id": env_role_3.user.id,
"name": env_role_3.user.full_name, "user_name": env_role_3.user.full_name,
"role": None, "role_name": None,
}, },
] ]
@ -155,32 +155,12 @@ def test_get_members_by_role(db):
basic_access_members = Environments.get_members_by_role( basic_access_members = Environments.get_members_by_role(
environment, CSPRole.BASIC_ACCESS.value environment, CSPRole.BASIC_ACCESS.value
) )
assert basic_access_members == [ technical_read_members = Environments.get_members_by_role(
{
"user_id": str(env_role_1.user_id),
"user_name": env_role_1.user.full_name,
"role": CSPRole.BASIC_ACCESS.value,
}
]
assert {
"user_id": str(rando_env_role.user_id),
"user_name": rando_env_role.user.full_name,
"role": CSPRole.BASIC_ACCESS.value,
} not in basic_access_members
assert Environments.get_members_by_role(
environment, CSPRole.TECHNICAL_READ.value environment, CSPRole.TECHNICAL_READ.value
) == [ )
{ assert basic_access_members == [env_role_1]
"user_id": str(env_role_2.user_id), assert rando_env_role not in basic_access_members
"user_name": env_role_2.user.full_name, assert technical_read_members == [env_role_2, env_role_3]
"role": CSPRole.TECHNICAL_READ.value,
},
{
"user_id": str(env_role_3.user_id),
"user_name": env_role_3.user.full_name,
"role": CSPRole.TECHNICAL_READ.value,
},
]
assert ( assert (
Environments.get_members_by_role(environment, CSPRole.BUSINESS_READ.value) == [] Environments.get_members_by_role(environment, CSPRole.BUSINESS_READ.value) == []
) )

View File

@ -171,7 +171,7 @@ def test_data_for_app_env_roles_form(app, client, user_session):
{ {
"user_id": str(app_role.user_id), "user_id": str(app_role.user_id),
"user_name": app_role.user.full_name, "user_name": app_role.user.full_name,
"role": None, "role_name": None,
} }
], ],
}, },
@ -181,7 +181,7 @@ def test_data_for_app_env_roles_form(app, client, user_session):
{ {
"user_id": str(env_role1.user_id), "user_id": str(env_role1.user_id),
"user_name": env_role1.user.full_name, "user_name": env_role1.user.full_name,
"role": CSPRole.BASIC_ACCESS.value, "role_name": CSPRole.BASIC_ACCESS.value,
} }
], ],
}, },
@ -191,7 +191,7 @@ def test_data_for_app_env_roles_form(app, client, user_session):
{ {
"user_id": str(env_role2.user_id), "user_id": str(env_role2.user_id),
"user_name": env_role2.user.full_name, "user_name": env_role2.user.full_name,
"role": CSPRole.NETWORK_ADMIN.value, "role_name": CSPRole.NETWORK_ADMIN.value,
} }
], ],
}, },