From 5b55b5800e26ba8c8f5c422e562444dd0c900419 Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Wed, 18 Dec 2019 12:18:43 -0500 Subject: [PATCH 1/2] Remove route, tests, and template code for deleting an application --- atst/routes/applications/settings.py | 15 ------ templates/applications/settings.html | 53 +--------------------- tests/routes/applications/test_settings.py | 35 -------------- tests/test_access.py | 34 -------------- 4 files changed, 1 insertion(+), 136 deletions(-) diff --git a/atst/routes/applications/settings.py b/atst/routes/applications/settings.py index f2d252a9..7d5c20d4 100644 --- a/atst/routes/applications/settings.py +++ b/atst/routes/applications/settings.py @@ -337,21 +337,6 @@ def update(application_id): return render_settings_page(application=application, application_form=form) -@applications_bp.route("/applications//delete", methods=["POST"]) -@user_can(Permissions.DELETE_APPLICATION, message="delete application") -def delete(application_id): - application = Applications.get(application_id) - Applications.delete(application) - - flash("application_deleted", application_name=application.name) - - return redirect( - url_for( - "applications.portfolio_applications", portfolio_id=application.portfolio_id - ) - ) - - @applications_bp.route("/environments//delete", methods=["POST"]) @user_can(Permissions.DELETE_ENVIRONMENT, message="delete environment") def delete_environment(environment_id): diff --git a/templates/applications/settings.html b/templates/applications/settings.html index c8e41fcd..9d2fb146 100644 --- a/templates/applications/settings.html +++ b/templates/applications/settings.html @@ -59,59 +59,8 @@ environments_obj, new_env_form) }} - {% if user_can(permissions.DELETE_APPLICATION) %} - {% set env_count = application.environments | length %} - {% if env_count == 1 %} - {% set pluralized_env = "environment" %} - {% else %} - {% set pluralized_env = "environments" %} - {% endif %} - -

- {{ "portfolios.applications.delete.subheading" | translate }} -

-
-
- {{ "portfolios.applications.delete.text" | translate({"application_name": application.name}) | safe }} -
-
-
- -
-
-
- - {% call Modal(name="delete-application") %} -

{{ "portfolios.applications.delete.header" | translate }}

-
- {{ - Alert( - title=("components.modal.destructive_title" | translate), - message=("portfolios.applications.delete.alert.message" | translate), - level="warning" - ) - }} - - {{ - DeleteConfirmation( - modal_id="delete_application", - delete_text=('portfolios.applications.delete.button' | translate), - delete_action= url_for('applications.delete', application_id=application.id), - form=application_form - ) - }} - {% endcall %} - {% endif %} - -
- {% if user_can(permissions.VIEW_APPLICATION_ACTIVITY_LOG) and config.get("USE_AUDIT_LOG", False) %} +
{% include "fragments/audit_events_log.html" %} {{ Pagination(audit_events, url=url_for('applications.settings', application_id=application.id)) }} {% endif %} diff --git a/tests/routes/applications/test_settings.py b/tests/routes/applications/test_settings.py index 08c979ad..cd075c80 100644 --- a/tests/routes/applications/test_settings.py +++ b/tests/routes/applications/test_settings.py @@ -288,41 +288,6 @@ def test_user_can_only_access_apps_in_their_portfolio(client, user_session): assert time_updated == other_application.time_updated -def test_delete_application(client, user_session): - user = UserFactory.create() - port = PortfolioFactory.create( - owner=user, - applications=[ - { - "name": "mos eisley", - "environments": [ - {"name": "bar"}, - {"name": "booth"}, - {"name": "band stage"}, - ], - } - ], - ) - application = port.applications[0] - user_session(user) - - response = client.post( - url_for("applications.delete", application_id=application.id) - ) - # appropriate response and redirect - assert response.status_code == 302 - assert response.location == url_for( - "applications.portfolio_applications", portfolio_id=port.id, _external=True - ) - # appropriate flash message - message = get_flashed_messages()[0] - assert "deleted" in message["message"] - assert application.name in message["message"] - # app and envs are soft deleted - assert len(port.applications) == 0 - assert len(application.environments) == 0 - - def test_new_environment(client, user_session): user = UserFactory.create() portfolio = PortfolioFactory(owner=user) diff --git a/tests/test_access.py b/tests/test_access.py index ad4bd5be..5c8d5ae1 100644 --- a/tests/test_access.py +++ b/tests/test_access.py @@ -343,40 +343,6 @@ def test_portfolios_invite_member_access(post_url_assert_status): post_url_assert_status(rando, url, 404) -# applications.delete -def test_applications_delete_access(post_url_assert_status, monkeypatch): - ccpo = UserFactory.create_ccpo() - owner = user_with() - app_admin = user_with() - rando = user_with() - - portfolio = PortfolioFactory.create( - owner=owner, applications=[{"name": "mos eisley"}] - ) - application = portfolio.applications[0] - - ApplicationRoleFactory.create( - user=app_admin, - application=application, - permission_sets=PermissionSets.get_many( - [ - PermissionSets.VIEW_APPLICATION, - PermissionSets.EDIT_APPLICATION_ENVIRONMENTS, - PermissionSets.EDIT_APPLICATION_TEAM, - PermissionSets.DELETE_APPLICATION_ENVIRONMENTS, - ] - ), - ) - - monkeypatch.setattr("atst.domain.applications.Applications.delete", lambda *a: True) - - url = url_for("applications.delete", application_id=application.id) - post_url_assert_status(app_admin, url, 404) - post_url_assert_status(rando, url, 404) - post_url_assert_status(owner, url, 302) - post_url_assert_status(ccpo, url, 302) - - # applications.settings def test_application_settings_access(get_url_assert_status): ccpo = user_with(PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT) From 2b884f2c855c40e6dba5a23e7b932b053806be44 Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Wed, 18 Dec 2019 12:22:14 -0500 Subject: [PATCH 2/2] Remove route, tests, and template code for deleting a portfolio --- atst/routes/portfolios/index.py | 10 ----- templates/portfolios/admin.html | 6 +-- .../fragments/delete_portfolio.html | 42 ------------------- tests/routes/portfolios/test_index.py | 32 -------------- tests/test_access.py | 31 -------------- 5 files changed, 1 insertion(+), 120 deletions(-) delete mode 100644 templates/portfolios/fragments/delete_portfolio.html diff --git a/atst/routes/portfolios/index.py b/atst/routes/portfolios/index.py index 0447be57..f9e7d5cf 100644 --- a/atst/routes/portfolios/index.py +++ b/atst/routes/portfolios/index.py @@ -56,13 +56,3 @@ def reports(portfolio_id): monthly_spending=Reports.monthly_spending(portfolio), retrieved=datetime.now(), # mocked datetime of reporting data retrival ) - - -@portfolios_bp.route("/portfolios//destroy", methods=["POST"]) -@user_can(Permissions.ARCHIVE_PORTFOLIO, message="archive portfolio") -def delete_portfolio(portfolio_id): - Portfolios.delete(portfolio=g.portfolio) - - flash("portfolio_deleted", portfolio_name=g.portfolio.name) - - return redirect(url_for("atst.home")) diff --git a/templates/portfolios/admin.html b/templates/portfolios/admin.html index 5bfb7d7c..d1e6e353 100644 --- a/templates/portfolios/admin.html +++ b/templates/portfolios/admin.html @@ -56,14 +56,10 @@ {% include "portfolios/fragments/primary_point_of_contact.html" %} {% endif %} - {% if user_can(permissions.ARCHIVE_PORTFOLIO) %} - {% include "portfolios/fragments/delete_portfolio.html" %} - {% endif %} - {% if user_can(permissions.VIEW_PORTFOLIO_USERS) %} {% include "portfolios/fragments/portfolio_members.html" %} {% endif %} - + {% if user_can(permissions.VIEW_PORTFOLIO_ACTIVITY_LOG) and config.get("USE_AUDIT_LOG", False) %} {% include "fragments/audit_events_log.html" %} {{ Pagination(audit_events, url_for('portfolios.admin', portfolio_id=portfolio.id)) }} diff --git a/templates/portfolios/fragments/delete_portfolio.html b/templates/portfolios/fragments/delete_portfolio.html deleted file mode 100644 index da83b2e7..00000000 --- a/templates/portfolios/fragments/delete_portfolio.html +++ /dev/null @@ -1,42 +0,0 @@ -{% from "components/delete_confirmation.html" import DeleteConfirmation %} -{% from "components/alert.html" import Alert %} -{% from "components/modal.html" import Modal %} - -
-
-

{{ "fragments.delete_portfolio.title" | translate }}

-

{{ "fragments.delete_portfolio.subtitle" | translate }}

- - -
- {{ "common.deactivate" | translate }} -
-
-
- -{% call Modal(name="delete_portfolio") %} -

- {{ 'fragments.delete_portfolio.title' | translate }} -

-
- {{ - Alert( - level="warning", - title=('components.modal.destructive_title' | translate), - message=('components.modal.destructive_message' | translate({"resource": "portfolio"})), - ) - }} - - {{ - DeleteConfirmation( - modal_id='delete_portfolio', - delete_text='Deactivate', - delete_action=url_for('portfolios.delete_portfolio', portfolio_id=portfolio.id), - form=portfolio_form, - confirmation_text="deactivate", - ) - }} -{% endcall %} diff --git a/tests/routes/portfolios/test_index.py b/tests/routes/portfolios/test_index.py index 745430f0..489f73b2 100644 --- a/tests/routes/portfolios/test_index.py +++ b/tests/routes/portfolios/test_index.py @@ -84,35 +84,3 @@ def test_portfolio_reports_with_mock_portfolio(client, user_session): response = client.get(url_for("portfolios.reports", portfolio_id=portfolio.id)) assert response.status_code == 200 assert portfolio.name in response.data.decode() - - -def test_delete_portfolio_success(client, user_session): - portfolio = PortfolioFactory.create() - owner = portfolio.owner - user_session(owner) - - assert len(Portfolios.for_user(user=owner)) == 1 - - response = client.post( - url_for("portfolios.delete_portfolio", portfolio_id=portfolio.id) - ) - - assert response.status_code == 302 - assert url_for("atst.home") in response.location - assert len(Portfolios.for_user(user=owner)) == 0 - - -def test_delete_portfolio_failure(no_debug_client, user_session): - portfolio = PortfolioFactory.create() - application = ApplicationFactory.create(portfolio=portfolio) - owner = portfolio.owner - user_session(owner) - - assert len(Portfolios.for_user(user=owner)) == 1 - - response = no_debug_client.post( - url_for("portfolios.delete_portfolio", portfolio_id=portfolio.id) - ) - - assert response.status_code == 500 - assert len(Portfolios.for_user(user=owner)) == 1 diff --git a/tests/test_access.py b/tests/test_access.py index 5c8d5ae1..1adcb65d 100644 --- a/tests/test_access.py +++ b/tests/test_access.py @@ -665,34 +665,3 @@ def test_task_orders_new_post_routes(post_url_assert_status): post_url_assert_status(owner, url, 302, data=data) post_url_assert_status(ccpo, url, 302, data=data) post_url_assert_status(rando, url, 404, data=data) - - -def test_portfolio_delete_access(post_url_assert_status): - rando = UserFactory.create() - owner = UserFactory.create() - ccpo = UserFactory.create_ccpo() - - post_url_assert_status( - ccpo, - url_for( - "portfolios.delete_portfolio", portfolio_id=PortfolioFactory.create().id - ), - 302, - ) - - post_url_assert_status( - owner, - url_for( - "portfolios.delete_portfolio", - portfolio_id=PortfolioFactory.create(owner=owner).id, - ), - 302, - ) - - post_url_assert_status( - rando, - url_for( - "portfolios.delete_portfolio", portfolio_id=PortfolioFactory.create().id - ), - 404, - )