Functionality for adding an env

- uses two route functions - one for update app, another for add
environment
- uses a second form for the app settings page
- uses the /environments/new url naming convention
This commit is contained in:
Montana 2019-05-08 13:53:56 -04:00
parent 41818d7955
commit f07ea38b9b
4 changed files with 85 additions and 22 deletions

View File

@ -101,6 +101,7 @@ def settings(application_id):
members_form=members_form, members_form=members_form,
active_toggler=http_request.args.get("active_toggler"), active_toggler=http_request.args.get("active_toggler"),
active_toggler_section=http_request.args.get("active_toggler_section"), active_toggler_section=http_request.args.get("active_toggler_section"),
new_env_form=EditEnvironmentForm(),
) )
@ -135,12 +136,52 @@ def update_environment(environment_id):
form=ApplicationForm( form=ApplicationForm(
name=application.name, description=application.description name=application.name, description=application.description
), ),
new_env_form=EditEnvironmentForm(),
members_form=AppEnvRolesForm(
data=data_for_app_env_roles_form(application)
),
environments_obj=get_environments_obj_for_app(application=application),
active_toggler=environment.id,
active_toggler_section="edit",
),
400,
)
@applications_bp.route(
"/applications/<application_id>/environments/new", methods=["POST"]
)
@user_can(Permissions.CREATE_ENVIRONMENT, message="create application environment")
def new_environment(application_id):
application = Applications.get(application_id)
env_form = EditEnvironmentForm(formdata=http_request.form)
if env_form.validate():
Environments.create(application=application, name=env_form.name.data)
flash("application_environments_updated")
return redirect(
url_for(
"applications.settings",
application_id=application.id,
fragment="application-environments",
_anchor="application-environments",
)
)
else:
return (
render_template(
"portfolios/applications/settings.html",
application=application,
form=ApplicationForm(
name=application.name, description=application.description
),
new_env_form=env_form,
environments_obj=get_environments_obj_for_app(application=application), environments_obj=get_environments_obj_for_app(application=application),
members_form=AppEnvRolesForm( members_form=AppEnvRolesForm(
data=data_for_app_env_roles_form(application) data=data_for_app_env_roles_form(application)
), ),
active_toggler=environment.id,
active_toggler_section="edit",
), ),
400, 400,
) )
@ -166,22 +207,10 @@ def update(application_id):
"portfolios/applications/settings.html", "portfolios/applications/settings.html",
application=application, application=application,
form=form, form=form,
new_env_form=EditEnvironmentForm(),
environments_obj=get_environments_obj_for_app(application=application), environments_obj=get_environments_obj_for_app(application=application),
) )
@applications_bp.route("/applications/<application_id>/add_environment", methods=["POST"])
@user_can(Permissions.EDIT_APPLICATION, message="add application environment")
def add_environment(application_id):
application = Applications.get(application_id)
form = ApplicationForm(http_request.form)
return render_template(
"portfolios/applications/settings.html",
application=application,
form=form,
environments_obj=get_environments_obj_for_app(application=application),
)
@applications_bp.route("/environments/<environment_id>/roles", methods=["POST"]) @applications_bp.route("/environments/<environment_id>/roles", methods=["POST"])
@user_can(Permissions.ASSIGN_ENVIRONMENT_MEMBER, message="update environment roles") @user_can(Permissions.ASSIGN_ENVIRONMENT_MEMBER, message="update environment roles")
@ -233,6 +262,7 @@ def update_env_roles(environment_id):
form=ApplicationForm( form=ApplicationForm(
name=application.name, description=application.description name=application.name, description=application.description
), ),
new_env_form=EditEnvironmentForm(),
environments_obj=get_environments_obj_for_app(application=application), environments_obj=get_environments_obj_for_app(application=application),
active_toggler=environment.id, active_toggler=environment.id,
active_toggler_section="edit", active_toggler_section="edit",

View File

@ -1,7 +1,9 @@
{% from 'components/save_button.html' import SaveButton %}
{% from "components/text_input.html" import TextInput %}
{% from "components/toggle_list.html" import ToggleButton, ToggleSection %} {% from "components/toggle_list.html" import ToggleButton, ToggleSection %}
<form method='POST' id="add-new-env" action='{{ url_for("applications.add_environment", application_id=application.id) }}' autocomplete="off" enctype="multipart/form-data"> <form method='POST' id="add-new-env" action='{{ url_for("applications.new_environment", application_id=application.id) }}' autocomplete="off" enctype="multipart/form-data">
{{ form.csrf_token }} {{ new_env_form.csrf_token }}
<toggler inline-template> <toggler inline-template>
<div> <div>
@ -17,7 +19,9 @@
<span>{{ "portfolios.applications.create_new_env" | translate }}</span> <span>{{ "portfolios.applications.create_new_env" | translate }}</span>
<div>{{ "portfolios.applications.create_new_env_info" | translate }}</div> <div>{{ "portfolios.applications.create_new_env_info" | translate }}</div>
<span>{{ "portfolios.applications.enter_env_name" | translate }}</span> <span>{{ "portfolios.applications.enter_env_name" | translate }}</span>
{{ TextInput(new_env_form.name) }}
</div> </div>
{{ SaveButton(text=('common.save' | translate), element="input", form="add-new-env") }}
{% endcall %} {% endcall %}
{{ {{

View File

@ -128,9 +128,6 @@
</div> </div>
<div class="panel__footer"> <div class="panel__footer">
<div class="action-group"> <div class="action-group">
<a class='icon-link'>
{{ "portfolios.applications.add_environment" | translate }}
{{ Icon('plus') }}
</a>
</div> </div>
</div> </div>

View File

@ -54,7 +54,7 @@ def test_updating_application_environments_success(client, user_session):
assert environment.name == "new name a" assert environment.name == "new name a"
def test_updating_application_environments_failure(client, user_session): def test_update_environment_failure(client, user_session):
portfolio = PortfolioFactory.create() portfolio = PortfolioFactory.create()
application = ApplicationFactory.create(portfolio=portfolio) application = ApplicationFactory.create(portfolio=portfolio)
environment = EnvironmentFactory.create( environment = EnvironmentFactory.create(
@ -391,6 +391,38 @@ def test_delete_application(client, user_session):
assert len(application.environments) == 0 assert len(application.environments) == 0
def test_new_environment(client, user_session):
user = UserFactory.create()
portfolio = PortfolioFactory(owner=user)
application = ApplicationFactory.create(portfolio=portfolio)
num_envs = len(application.environments)
user_session(user)
response = client.post(
url_for("applications.new_environment", application_id=application.id),
data={"name": "dabea"},
)
assert response.status_code == 302
assert len(application.environments) == num_envs + 1
def test_new_environment_with_bad_data(client, user_session):
user = UserFactory.create()
portfolio = PortfolioFactory(owner=user)
application = ApplicationFactory.create(portfolio=portfolio)
num_envs = len(application.environments)
user_session(user)
response = client.post(
url_for("applications.new_environment", application_id=application.id),
data={"name": None},
)
assert response.status_code == 400
assert len(application.environments) == num_envs
def test_delete_environment(client, user_session): def test_delete_environment(client, user_session):
user = UserFactory.create() user = UserFactory.create()
portfolio = PortfolioFactory(owner=user) portfolio = PortfolioFactory(owner=user)