Get error state in edit environment name form working

This commit is contained in:
George Drummond 2019-05-02 10:23:01 -04:00
parent 2f75d3b245
commit 430a6493f0
No known key found for this signature in database
GPG Key ID: 296DD6077123BF17
5 changed files with 66 additions and 20 deletions

View File

@ -1,11 +1,12 @@
from .forms import BaseForm from .forms import BaseForm
from wtforms.fields import StringField, TextAreaField, FieldList from wtforms.fields import StringField, TextAreaField, FieldList, HiddenField
from wtforms.validators import Required from wtforms.validators import Required
from atst.forms.validators import ListItemRequired, ListItemsUnique from atst.forms.validators import ListItemRequired, ListItemsUnique
from atst.utils.localization import translate from atst.utils.localization import translate
class EditEnvironmentForm(BaseForm): class EditEnvironmentForm(BaseForm):
id = HiddenField()
name = StringField( name = StringField(
label=translate("forms.environments.name_label"), validators=[Required()] label=translate("forms.environments.name_label"), validators=[Required()]
) )

View File

@ -13,13 +13,20 @@ from atst.models.permissions import Permissions
from atst.utils.flash import formatted_flash as flash from atst.utils.flash import formatted_flash as flash
def get_environments_obj_for_app(application): def get_environments_obj_for_app(application, form=None):
environments_obj = [] environments_obj = []
for env in application.environments: for env in application.environments:
edit_form = None
if form == None or form.data["id"] != env.id:
edit_form = EditEnvironmentForm(obj=env)
else:
edit_form = form
env_data = { env_data = {
"id": env.id, "id": env.id,
"name": env.name, "name": env.name,
"edit_form": EditEnvironmentForm(obj=env), "edit_form": edit_form,
"members_form": EnvironmentRolesForm(data=data_for_env_members_form(env)), "members_form": EnvironmentRolesForm(data=data_for_env_members_form(env)),
"members": sort_env_users_by_role(env), "members": sort_env_users_by_role(env),
} }
@ -85,21 +92,35 @@ def update_environment(environment_id):
environment = Environments.get(environment_id) environment = Environments.get(environment_id)
application = environment.application application = environment.application
form = EditEnvironmentForm(formdata=http_request.form) env_form = EditEnvironmentForm(obj=environment, formdata=http_request.form)
if form.validate(): if env_form.validate():
Environments.update(environment=environment, name=form.name.data) Environments.update(environment=environment, name=env_form.name.data)
flash("application_environments_updated") flash("application_environments_updated")
return redirect( return redirect(
url_for( url_for(
"applications.settings", "applications.settings",
application_id=application.id, application_id=application.id,
fragment="application-environments", fragment="application-environments",
_anchor="application-environments", _anchor="application-environments",
)
)
else:
return (
render_template(
"portfolios/applications/settings.html",
application=application,
form=ApplicationForm(
name=application.name, description=application.description
),
environments_obj=get_environments_obj_for_app(
application=application, form=env_form
),
),
400,
) )
)
@applications_bp.route("/applications/<application_id>/edit", methods=["POST"]) @applications_bp.route("/applications/<application_id>/edit", methods=["POST"])

View File

@ -6,13 +6,17 @@ export default {
mixins: [FormMixin], mixins: [FormMixin],
props: {
initialSelectedSection: String,
},
components: { components: {
textinput, textinput,
}, },
data: function() { data: function() {
return { return {
selectedSection: null, selectedSection: this.initialSelectedSection,
} }
}, },

View File

@ -48,11 +48,12 @@
<ul class="accordion-table__items"> <ul class="accordion-table__items">
{% for env in environments_obj %} {% for env in environments_obj %}
{% set edit_form = env['edit_form'] %}
{% set member_count = env['members_form'].data['team_roles'] | length %} {% set member_count = env['members_form'].data['team_roles'] | length %}
{% set members_by_role = env['members'] %} {% set members_by_role = env['members'] %}
{% set unassigned = members_by_role['no_access'] %} {% set unassigned = members_by_role['no_access'] %}
<toggler inline-template> <toggler inline-template {% if edit_form.errors %}initial-selected-section="edit"{% endif %}>
<li class="accordion-table__item"> <li class="accordion-table__item">
<div class="accordion-table__item-content row"> <div class="accordion-table__item-content row">
<div class="col col--grow"> <div class="col col--grow">
@ -107,10 +108,9 @@
{% call ToggleSection(section_name="edit") %} {% call ToggleSection(section_name="edit") %}
<ul> <ul>
<li class="accordion-table__item__expanded"> <li class="accordion-table__item__expanded">
{% set edit_form = env['edit_form'] %} <form action="{{ url_for('applications.update_environment', environment_id=env['id'], fragment='application-environments', _anchor='application-environments') }}" method="post">
<form action="{{ url_for('applications.update_environment', environment_id=env['id']) }}" method="post">
{{ edit_form.csrf_token }} {{ edit_form.csrf_token }}
{{ TextInput(edit_form.name) }} {{ TextInput(edit_form.name, validation='requiredField') }}
{{ {{
SaveButton( SaveButton(
text=("portfolios.applications.update_button_text" | translate) text=("portfolios.applications.update_button_text" | translate)

View File

@ -27,7 +27,7 @@ from atst.forms.app_settings import EnvironmentRolesForm
from tests.utils import captured_templates from tests.utils import captured_templates
def test_updating_application_environments(client, user_session): def test_updating_application_environments_success(client, user_session):
portfolio = PortfolioFactory.create() portfolio = PortfolioFactory.create()
application = ApplicationFactory.create(portfolio=portfolio) application = ApplicationFactory.create(portfolio=portfolio)
environment = EnvironmentFactory.create(application=application) environment = EnvironmentFactory.create(application=application)
@ -52,6 +52,26 @@ def test_updating_application_environments(client, user_session):
assert environment.name == "new name a" assert environment.name == "new name a"
def test_updating_application_environments_failure(client, user_session):
portfolio = PortfolioFactory.create()
application = ApplicationFactory.create(portfolio=portfolio)
environment = EnvironmentFactory.create(
application=application, name="original name"
)
user_session(portfolio.owner)
form_data = {"name": ""}
response = client.post(
url_for("applications.update_environment", environment_id=environment.id),
data=form_data,
)
assert response.status_code == 400
assert environment.name == "original name"
def test_application_settings(client, user_session): def test_application_settings(client, user_session):
portfolio = PortfolioFactory.create() portfolio = PortfolioFactory.create()
application = Applications.create( application = Applications.create(