extract new member form into standalone form class

This commit is contained in:
dandds 2019-04-23 13:38:17 -04:00
parent c4ad7b4378
commit dd0b184bc2
6 changed files with 67 additions and 46 deletions

27
atst/forms/member.py Normal file
View File

@ -0,0 +1,27 @@
from flask_wtf import FlaskForm
from wtforms.fields.html5 import EmailField, TelField
from wtforms.validators import Required, Email, Length, Optional
from wtforms.fields import StringField
from atst.forms.validators import IsNumber, PhoneNumber
from atst.utils.localization import translate
class NewForm(FlaskForm):
first_name = StringField(
label=translate("forms.new_member.first_name_label"), validators=[Required()]
)
last_name = StringField(
label=translate("forms.new_member.last_name_label"), validators=[Required()]
)
email = EmailField(
translate("forms.new_member.email_label"), validators=[Required(), Email()]
)
phone_number = TelField(
translate("forms.new_member.phone_number_label"),
validators=[Optional(), PhoneNumber()],
)
dod_id = StringField(
translate("forms.new_member.dod_id_label"),
validators=[Required(), Length(min=10), IsNumber()],
)

View File

@ -1,10 +1,9 @@
from wtforms.fields.html5 import EmailField, TelField from wtforms.validators import Required
from wtforms.validators import Required, Email, Length, Optional
from wtforms.fields import StringField, FormField, FieldList, HiddenField from wtforms.fields import StringField, FormField, FieldList, HiddenField
from atst.domain.permission_sets import PermissionSets from atst.domain.permission_sets import PermissionSets
from .forms import BaseForm from .forms import BaseForm
from atst.forms.validators import IsNumber, PhoneNumber from .member import NewForm as BaseNewMemberForm
from atst.forms.fields import SelectField from atst.forms.fields import SelectField
from atst.utils.localization import translate from atst.utils.localization import translate
@ -62,24 +61,16 @@ class EditForm(PermissionsForm):
pass pass
class NewForm(PermissionsForm): class NewForm(BaseForm):
first_name = StringField( user_data = FormField(BaseNewMemberForm)
label=translate("forms.new_member.first_name_label"), validators=[Required()] permission_sets = FormField(PermissionsForm)
)
last_name = StringField( @property
label=translate("forms.new_member.last_name_label"), validators=[Required()] def update_data(self):
) return {
email = EmailField( "permission_sets": self.data.get("permission_sets").get("permission_sets"),
translate("forms.new_member.email_label"), validators=[Required(), Email()] **self.data.get("user_data"),
) }
phone_number = TelField(
translate("forms.new_member.phone_number_label"),
validators=[Optional(), PhoneNumber()],
)
dod_id = StringField(
translate("forms.new_member.dod_id_label"),
validators=[Required(), Length(min=10), IsNumber()],
)
class AssignPPOCForm(PermissionsForm): class AssignPPOCForm(PermissionsForm):

View File

@ -34,9 +34,9 @@ def create_member(portfolio_id):
if form.validate(): if form.validate():
try: try:
member = Portfolios.create_member(portfolio, form.data) member = Portfolios.create_member(portfolio, form.update_data)
invite_service = InvitationService( invite_service = InvitationService(
g.current_user, member, form.data.get("email") g.current_user, member, form.update_data.get("email")
) )
invite_service.invite() invite_service.invite()

View File

@ -21,23 +21,23 @@
</div> </div>
<div class='form-row'> <div class='form-row'>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(member_form.first_name, validation='requiredField') }} {{ TextInput(member_form.user_data.first_name, validation='requiredField') }}
</div> </div>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(member_form.last_name, validation='requiredField') }} {{ TextInput(member_form.user_data.last_name, validation='requiredField') }}
</div> </div>
</div> </div>
<div class='form-row'> <div class='form-row'>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(member_form.email, validation='email') }} {{ TextInput(member_form.user_data.email, validation='email') }}
</div> </div>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(member_form.phone_number, validation='usPhone', optional=True) }} {{ TextInput(member_form.user_data.phone_number, validation='usPhone', optional=True) }}
</div> </div>
</div> </div>
<div class='form-row'> <div class='form-row'>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
{{ TextInput(member_form.dod_id, validation='dodId') }} {{ TextInput(member_form.user_data.dod_id, validation='dodId') }}
</div> </div>
<div class='form-col form-col--half'> <div class='form-col form-col--half'>
</div> </div>
@ -61,10 +61,10 @@
{{ "portfolios.admin.permissions_info" | translate }} {{ "portfolios.admin.permissions_info" | translate }}
</a> </a>
</div> </div>
{{ SimpleOptionsInput(member_form.perms_app_mgmt) }} {{ SimpleOptionsInput(member_form.permission_sets.perms_app_mgmt) }}
{{ SimpleOptionsInput(member_form.perms_funding) }} {{ SimpleOptionsInput(member_form.permission_sets.perms_funding) }}
{{ SimpleOptionsInput(member_form.perms_reporting) }} {{ SimpleOptionsInput(member_form.permission_sets.perms_reporting) }}
{{ SimpleOptionsInput(member_form.perms_portfolio_mgmt) }} {{ SimpleOptionsInput(member_form.permission_sets.perms_portfolio_mgmt) }}
<div class='action-group'> <div class='action-group'>
<input <input
type="submit" type="submit"

View File

@ -49,11 +49,14 @@ def test_new_member_accepts_valid_invite(monkeypatch, client, user_session):
response = client.post( response = client.post(
url_for("portfolios.create_member", portfolio_id=portfolio.id), url_for("portfolios.create_member", portfolio_id=portfolio.id),
data={ data={
"perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT, "permission_sets-perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
"perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING, "permission_sets-perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
"perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS, "permission_sets-perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
"perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN, "permission_sets-perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
**user_info, "user_data-first_name": user_info["first_name"],
"user_data-last_name": user_info["last_name"],
"user_data-dod_id": user_info["dod_id"],
"user_data-email": user_info["email"],
}, },
) )

View File

@ -5,10 +5,10 @@ from atst.domain.permission_sets import PermissionSets
from atst.queue import queue from atst.queue import queue
_DEFAULT_PERMS_FORM_DATA = { _DEFAULT_PERMS_FORM_DATA = {
"perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT, "permission_sets-perms_app_mgmt": PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
"perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING, "permission_sets-perms_funding": PermissionSets.VIEW_PORTFOLIO_FUNDING,
"perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS, "permission_sets-perms_reporting": PermissionSets.VIEW_PORTFOLIO_REPORTS,
"perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN, "permission_sets-perms_portfolio_mgmt": PermissionSets.VIEW_PORTFOLIO_ADMIN,
} }
@ -32,11 +32,11 @@ def test_create_member(client, user_session):
response = client.post( response = client.post(
url_for("portfolios.create_member", portfolio_id=portfolio.id), url_for("portfolios.create_member", portfolio_id=portfolio.id),
data={ data={
"dod_id": user.dod_id, "user_data-dod_id": user.dod_id,
"first_name": "Wilbur", "user_data-first_name": "user_data-Wilbur",
"last_name": "Zuckerman", "user_data-last_name": "user_data-Zuckerman",
"email": "some_pig@zuckermans.com", "user_data-email": "user_data-some_pig@zuckermans.com",
"portfolio_role": "developer", "user_data-portfolio_role": "user_data-developer",
**_DEFAULT_PERMS_FORM_DATA, **_DEFAULT_PERMS_FORM_DATA,
}, },
follow_redirects=True, follow_redirects=True,