def test_can_only_update_name_and_description(): owner = UserFactory.create() portfolio = PortfolioFactory.create( owner=owner, applications=[{ "name": "Application 1", "description": "a application", "environments": [{ "name": "dev" }], }], ) application = Applications.get(portfolio.applications[0].id) env_name = application.environments[0].name Applications.update( application, { "name": "New Name", "description": "a new application", "environment_name": "prod", }, ) assert application.name == "New Name" assert application.description == "a new application" assert len(application.environments) == 1 assert application.environments[0].name == env_name
def test_get_portfolio_events_includes_app_and_env_events(): owner = UserFactory.create() # add portfolio level events portfolio = PortfolioFactory.create(owner=owner) portfolio_events = AuditLog.get_portfolio_events(portfolio) # add application level events application = ApplicationFactory.create(portfolio=portfolio) Applications.update(application, {"name": "Star Cruiser"}) app_role = ApplicationRoleFactory.create(application=application) app_invite = ApplicationInvitationFactory.create(role=app_role) portfolio_and_app_events = AuditLog.get_portfolio_events(portfolio) assert len(portfolio_events) < len(portfolio_and_app_events) # add environment level events env = EnvironmentFactory.create(application=application) env_role = EnvironmentRoleFactory.create(environment=env, application_role=app_role) portfolio_app_and_env_events = AuditLog.get_portfolio_events(portfolio) assert len(portfolio_and_app_events) < len(portfolio_app_and_env_events) resource_types = [event.resource_type for event in portfolio_app_and_env_events] assert "application" in resource_types assert "application_role" in resource_types assert "application_invitation" in resource_types assert "environment" in resource_types assert "environment_role" in resource_types
def test_update_does_not_duplicate_names_within_portfolio(): portfolio = PortfolioFactory.create() name = "An Awesome Application" application = ApplicationFactory.create(portfolio=portfolio, name=name) dupe_application = ApplicationFactory.create(portfolio=portfolio) with pytest.raises(AlreadyExistsError): Applications.update(dupe_application, {"name": name})
def update(application_id): application = Applications.get(application_id) form = NameAndDescriptionForm(http_request.form) if form.validate(): application_data = form.data Applications.update(application, application_data) return redirect( url_for( "applications.portfolio_applications", portfolio_id=application.portfolio_id, )) else: return render_settings_page(application=application, application_form=form)
def create_or_update_new_application_step_1(portfolio_id=None, application_id=None): form = get_new_application_form({**http_request.form}, NameAndDescriptionForm, application_id) if form.validate(): application = None if application_id: application = Applications.get(application_id) application = Applications.update(application, form.data) flash("application_updated", application_name=application.name) else: portfolio = Portfolios.get_for_update(portfolio_id) application = Applications.create(g.current_user, portfolio, **form.data) flash("application_created", application_name=application.name) return redirect( url_for( "applications.update_new_application_step_2", application_id=application.id, )) else: return ( render_new_application_form( "applications/new/step_1.html", NameAndDescriptionForm, portfolio_id, application_id, form, ), 400, )
def test_get_application_events(): # add in some portfolio level events portfolio = PortfolioFactory.create() Portfolios.update(portfolio, {"name": "New Name"}) # add app level events application = ApplicationFactory.create(portfolio=portfolio) Applications.update(application, {"name": "Star Cruiser"}) app_role = ApplicationRoleFactory.create(application=application) app_invite = ApplicationInvitationFactory.create(role=app_role) env = EnvironmentFactory.create(application=application) env_role = EnvironmentRoleFactory.create(environment=env, application_role=app_role) # add rando app rando_app = ApplicationFactory.create(portfolio=portfolio) events = AuditLog.get_application_events(application) for event in events: assert event.application_id == application.id assert not event.application_id == rando_app.id resource_types = [event.resource_type for event in events] assert "portfolio" not in resource_types
def handle_update_application(form, application_id=None, portfolio_id=None): if form.validate(): application = None try: if application_id: application = Applications.get(application_id) application = Applications.update(application, form.data) flash("application_updated", application_name=application.name) else: portfolio = Portfolios.get_for_update(portfolio_id) application = Applications.create(g.current_user, portfolio, **form.data) flash("application_created", application_name=application.name) return application except AlreadyExistsError: flash("application_name_error", name=form.data["name"]) return False
def update_new_application_step_2(application_id): form = get_new_application_form({**http_request.form}, EnvironmentsForm, application_id) if form.validate(): application = Applications.get(application_id) application = Applications.update(application, form.data) flash("application_environments_updated") return redirect( url_for( "applications.update_new_application_step_3", application_id=application_id, )) else: return ( render_new_application_form( "applications/new/step_2.html", EnvironmentsForm, application_id=application_id, form=form, ), 400, )