Create form in view route for application settings
This commit is contained in:
parent
5de1b859db
commit
fbd9c9db66
@ -4,6 +4,7 @@ from . import applications_bp
|
|||||||
from atst.domain.environment_roles import EnvironmentRoles
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
from atst.domain.applications import Applications
|
from atst.domain.applications import Applications
|
||||||
from atst.forms.application import ApplicationForm
|
from atst.forms.application import ApplicationForm
|
||||||
|
from atst.forms.app_settings import EnvironmentForm
|
||||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||||
from atst.models.permissions import Permissions
|
from atst.models.permissions import Permissions
|
||||||
from atst.utils.flash import formatted_flash as flash
|
from atst.utils.flash import formatted_flash as flash
|
||||||
@ -23,17 +24,39 @@ def get_environments_obj_for_app(application):
|
|||||||
return environments_obj
|
return environments_obj
|
||||||
|
|
||||||
|
|
||||||
|
def serialize_env_member_form_data(application):
|
||||||
|
environments_list = []
|
||||||
|
for env in application.environments:
|
||||||
|
env_info = {"env_id": env.id, "team_roles": []}
|
||||||
|
for user in env.users:
|
||||||
|
env_role = EnvironmentRoles.get(user.id, env.id)
|
||||||
|
env_info["team_roles"].append(
|
||||||
|
{
|
||||||
|
"name": user.full_name,
|
||||||
|
"user_id": user.id,
|
||||||
|
"role": env_role.displayname,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
environments_list.append(env_info)
|
||||||
|
return environments_list
|
||||||
|
|
||||||
|
|
||||||
@applications_bp.route("/applications/<application_id>/settings")
|
@applications_bp.route("/applications/<application_id>/settings")
|
||||||
@user_can(Permissions.VIEW_APPLICATION, message="view application edit form")
|
@user_can(Permissions.VIEW_APPLICATION, message="view application edit form")
|
||||||
def settings(application_id):
|
def settings(application_id):
|
||||||
application = Applications.get(application_id)
|
application = Applications.get(application_id)
|
||||||
form = ApplicationForm(name=application.name, description=application.description)
|
form = ApplicationForm(name=application.name, description=application.description)
|
||||||
|
env_data = serialize_env_member_form_data(application)
|
||||||
|
env_forms = {}
|
||||||
|
for data in env_data:
|
||||||
|
env_forms[data["env_id"]] = EnvironmentForm(data=data)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
"portfolios/applications/edit.html",
|
"portfolios/applications/edit.html",
|
||||||
application=application,
|
application=application,
|
||||||
form=form,
|
form=form,
|
||||||
environments_obj=get_environments_obj_for_app(application=application),
|
environments_obj=get_environments_obj_for_app(application=application),
|
||||||
|
env_forms=env_forms,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ from atst.models import *
|
|||||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||||
from atst.models.application_role import Status as ApplicationRoleStatus
|
from atst.models.application_role import Status as ApplicationRoleStatus
|
||||||
from atst.models.invitation import Status as InvitationStatus
|
from atst.models.invitation import Status as InvitationStatus
|
||||||
|
from atst.models.environment_role import CSPRole
|
||||||
from atst.domain.invitations import Invitations
|
from atst.domain.invitations import Invitations
|
||||||
from atst.domain.permission_sets import PermissionSets
|
from atst.domain.permission_sets import PermissionSets
|
||||||
from atst.domain.portfolio_roles import PortfolioRoles
|
from atst.domain.portfolio_roles import PortfolioRoles
|
||||||
@ -234,7 +235,7 @@ class EnvironmentRoleFactory(Base):
|
|||||||
model = EnvironmentRole
|
model = EnvironmentRole
|
||||||
|
|
||||||
environment = factory.SubFactory(EnvironmentFactory)
|
environment = factory.SubFactory(EnvironmentFactory)
|
||||||
role = factory.Faker("name")
|
role = random.choice([e.value for e in CSPRole])
|
||||||
user = factory.SubFactory(UserFactory)
|
user = factory.SubFactory(UserFactory)
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@ from tests.factories import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from atst.domain.applications import Applications
|
from atst.domain.applications import Applications
|
||||||
|
from atst.domain.environment_roles import EnvironmentRoles
|
||||||
|
from atst.domain.environments import Environments
|
||||||
from atst.domain.portfolios import Portfolios
|
from atst.domain.portfolios import Portfolios
|
||||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||||
|
|
||||||
@ -65,6 +67,47 @@ def test_edit_application_environments_obj(app, client, user_session):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_edit_app_serialize_env_member_form_data(app, client, user_session):
|
||||||
|
portfolio = PortfolioFactory.create()
|
||||||
|
application = Applications.create(
|
||||||
|
portfolio,
|
||||||
|
"Snazzy Application",
|
||||||
|
"A new application for me and my friends",
|
||||||
|
{"env1", "env2"},
|
||||||
|
)
|
||||||
|
user1 = UserFactory.create()
|
||||||
|
user2 = UserFactory.create()
|
||||||
|
env1 = application.environments[0]
|
||||||
|
env2 = application.environments[1]
|
||||||
|
env_role1 = EnvironmentRoleFactory.create(environment=env1, user=user1)
|
||||||
|
env_role2 = EnvironmentRoleFactory.create(environment=env1, user=user2)
|
||||||
|
env_role3 = EnvironmentRoleFactory.create(environment=env2, user=user1)
|
||||||
|
|
||||||
|
user_session(portfolio.owner)
|
||||||
|
|
||||||
|
with captured_templates(app) as templates:
|
||||||
|
response = app.test_client().get(
|
||||||
|
url_for("applications.settings", application_id=application.id)
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
_, context = templates[0]
|
||||||
|
for env_id in context["env_forms"]:
|
||||||
|
env = Environments.get(environment_id=env_id)
|
||||||
|
form_data = {"env_id": env_id, "team_roles": []}
|
||||||
|
for user in env.users:
|
||||||
|
env_role = EnvironmentRoles.get(user.id, env.id)
|
||||||
|
form_data["team_roles"].append(
|
||||||
|
{
|
||||||
|
"name": user.full_name,
|
||||||
|
"user_id": user.id,
|
||||||
|
"role": env_role.displayname,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert context["env_forms"][env_id].data == form_data
|
||||||
|
|
||||||
|
|
||||||
def test_user_with_permission_can_update_application(client, user_session):
|
def test_user_with_permission_can_update_application(client, user_session):
|
||||||
owner = UserFactory.create()
|
owner = UserFactory.create()
|
||||||
portfolio = PortfolioFactory.create(
|
portfolio = PortfolioFactory.create(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user