diff --git a/atst/forms/team.py b/atst/forms/team.py new file mode 100644 index 00000000..ccc49e35 --- /dev/null +++ b/atst/forms/team.py @@ -0,0 +1,51 @@ +from flask_wtf import FlaskForm +from wtforms.fields import FormField, FieldList, HiddenField + +from .application_member import EnvironmentForm +from .forms import BaseForm +from atst.forms.fields import SelectField +from atst.domain.permission_sets import PermissionSets +from atst.utils.localization import translate + + +class PermissionsForm(FlaskForm): + perms_env_mgmt = SelectField( + translate("portfolios.applications.members.new.manage_envs"), + choices=[ + (None, "View only"), + (PermissionSets.EDIT_APPLICATION_ENVIRONMENTS, "Edit access"), + ], + filters=[BaseForm.remove_empty_string], + ) + perms_team_mgmt = SelectField( + translate("portfolios.applications.members.new.manage_team"), + choices=[ + (None, "View only"), + (PermissionSets.EDIT_APPLICATION_TEAM, "Edit access"), + ], + filters=[BaseForm.remove_empty_string], + ) + perms_del_env = SelectField( + choices=[(None, "No"), (PermissionSets.DELETE_APPLICATION_ENVIRONMENTS, "Yes")], + filters=[BaseForm.remove_empty_string], + ) + + @property + def data(self): + _data = super().data + permission_sets = [] + for field in _data: + if _data[field] is not None: + permission_sets.append(_data[field]) + + return permission_sets + + +class MemberForm(FlaskForm): + user_id = HiddenField() + environment_roles = FieldList(FormField(EnvironmentForm)) + permission_sets = FormField(PermissionsForm) + + +class TeamForm(BaseForm): + members = FieldList(FormField(MemberForm)) diff --git a/tests/forms/__init__.py b/tests/forms/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/forms/test_team.py b/tests/forms/test_team.py new file mode 100644 index 00000000..671a44ee --- /dev/null +++ b/tests/forms/test_team.py @@ -0,0 +1,26 @@ +from wtforms.validators import ValidationError +import pytest + +from atst.domain.permission_sets import PermissionSets +from atst.forms.team import * + + +def test_permissions_form_permission_sets(): + form_data = { + "perms_env_mgmt": "", + "perms_team_mgmt": PermissionSets.EDIT_APPLICATION_TEAM, + "perms_del_env": "", + } + form = PermissionsForm(data=form_data) + assert form.validate() + assert form.data == [PermissionSets.EDIT_APPLICATION_TEAM] + + +def test_permissions_form_invalid(): + form_data = { + "perms_env_mgmt": "not a real choice", + "perms_team_mgmt": PermissionSets.EDIT_APPLICATION_TEAM, + "perms_del_env": "", + } + form = PermissionsForm(data=form_data) + assert not form.validate() diff --git a/tests/routes/applications/__init__.py b/tests/routes/applications/__init__.py new file mode 100644 index 00000000..e69de29b