diff --git a/tests/routes/applications/test_index.py b/tests/routes/applications/test_index.py index 614d8d89..fd9bf646 100644 --- a/tests/routes/applications/test_index.py +++ b/tests/routes/applications/test_index.py @@ -44,7 +44,7 @@ def test_user_with_permission_has_add_application_link(client, user_session): url_for("applications.portfolio_applications", portfolio_id=portfolio.id) ) assert ( - url_for("applications.create", portfolio_id=portfolio.id) + url_for("applications.create_new_application_step_1", portfolio_id=portfolio.id) in response.data.decode() ) @@ -58,7 +58,7 @@ def test_user_without_permission_has_no_add_application_link(client, user_sessio url_for("applications.portfolio_applications", portfolio_id=portfolio.id) ) assert ( - url_for("applications.create", portfolio_id=portfolio.id) + url_for("applications.create_new_application_step_1", portfolio_id=portfolio.id) not in response.data.decode() ) diff --git a/tests/routes/applications/test_new.py b/tests/routes/applications/test_new.py index 6c9e086d..22c86969 100644 --- a/tests/routes/applications/test_new.py +++ b/tests/routes/applications/test_new.py @@ -1,21 +1,96 @@ from flask import url_for -from tests.factories import PortfolioFactory +from tests.factories import PortfolioFactory, ApplicationFactory +from atst.domain.applications import Applications -def test_creating_application(client, user_session): +def test_get_name_and_description_form(client, user_session): + portfolio = PortfolioFactory.create() + user_session(portfolio.owner) + response = client.get( + url_for("applications.view_new_application_step_1", portfolio_id=portfolio.id) + ) + assert response.status_code == 200 + + +def test_get_name_and_description_form_for_update(client, user_session): + name = "My Test Application" + description = "This is the description of the test application." + application = ApplicationFactory.create(name=name, description=description) + user_session(application.portfolio.owner) + response = client.get( + url_for( + "applications.view_new_application_step_1", + portfolio_id=application.portfolio.id, + application_id=application.id, + ) + ) + assert response.status_code == 200 + assert name in response.data.decode() + assert description in response.data.decode() + + +def test_post_name_and_description(client, user_session): portfolio = PortfolioFactory.create() user_session(portfolio.owner) response = client.post( - url_for("applications.create", portfolio_id=portfolio.id), - data={ - "name": "Test Application", - "description": "This is only a test", - "environment_names-0": "dev", - "environment_names-1": "staging", - "environment_names-2": "prod", - }, + url_for( + "applications.create_new_application_step_1", portfolio_id=portfolio.id + ), + data={"name": "Test Application", "description": "This is only a test"}, ) assert response.status_code == 302 assert len(portfolio.applications) == 1 - assert len(portfolio.applications[0].environments) == 3 + assert portfolio.applications[0].name == "Test Application" + assert portfolio.applications[0].description == "This is only a test" + + +def test_post_name_and_description_for_update(client, session, user_session): + application = ApplicationFactory.create() + user_session(application.portfolio.owner) + response = client.post( + url_for( + "applications.update_new_application_step_1", + portfolio_id=application.portfolio.id, + application_id=application.id, + ), + data={"name": "Test Application", "description": "This is only a test"}, + ) + assert response.status_code == 302 + + session.refresh(application) + assert application.name == "Test Application" + assert application.description == "This is only a test" + + +def test_get_environments(client, user_session): + application = ApplicationFactory.create() + user_session(application.portfolio.owner) + response = client.get( + url_for( + "applications.view_new_application_step_2", + portfolio_id=application.portfolio.id, + application_id=application.id, + ) + ) + assert response.status_code == 200 + + +def test_post_environments(client, session, user_session): + application = ApplicationFactory.create(environments=[]) + user_session(application.portfolio.owner) + response = client.post( + url_for( + "applications.update_new_application_step_2", + portfolio_id=application.portfolio.id, + application_id=application.id, + ), + data={ + "environment_names-0": "development", + "environment_names-1": "staging", + "environment_names-2": "production", + }, + ) + assert response.status_code == 302 + session.refresh(application) + assert len(application.environments) == 3 diff --git a/tests/test_access.py b/tests/test_access.py index 779ef7f6..f8ef43a2 100644 --- a/tests/test_access.py +++ b/tests/test_access.py @@ -222,17 +222,105 @@ def test_applications_access_environment_access(get_url_assert_status): get_url_assert_status(ccpo, url, 404) -# applications.create -def test_applications_create_access(post_url_assert_status): +# applications.view_new_application_step_1 +def test_applications_get_application_step_1(get_url_assert_status): ccpo = user_with(PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT) owner = user_with() rando = user_with() portfolio = PortfolioFactory.create(owner=owner) - url = url_for("applications.create", portfolio_id=portfolio.id) - post_url_assert_status(ccpo, url, 200) - post_url_assert_status(owner, url, 200) - post_url_assert_status(rando, url, 404) + url = url_for("applications.view_new_application_step_1", portfolio_id=portfolio.id) + get_url_assert_status(ccpo, url, 200) + get_url_assert_status(owner, url, 200) + get_url_assert_status(rando, url, 404) + + +# applications.view_new_application_step_1 +def test_applications_get_application_step_1_update(get_url_assert_status): + ccpo = user_with(PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT) + owner = user_with() + rando = user_with() + portfolio = PortfolioFactory.create(owner=owner) + application = ApplicationFactory.create(portfolio=portfolio) + + url = url_for( + "applications.view_new_application_step_1", + portfolio_id=portfolio.id, + application_id=application.id, + ) + get_url_assert_status(ccpo, url, 200) + get_url_assert_status(owner, url, 200) + get_url_assert_status(rando, url, 404) + + +# applications.create_or_update_new_application_step_1 +def test_applications_post_application_step_1(post_url_assert_status): + ccpo = user_with(PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT) + owner = user_with() + rando = user_with() + portfolio = PortfolioFactory.create(owner=owner) + application = ApplicationFactory.create(portfolio=portfolio) + step_1_form_data = { + "name": "Test Application", + "description": "This is only a test", + } + + url = url_for( + "applications.create_new_application_step_1", portfolio_id=portfolio.id + ) + post_url_assert_status(ccpo, url, 302, data=step_1_form_data) + post_url_assert_status(owner, url, 302, data=step_1_form_data) + post_url_assert_status(rando, url, 404, data=step_1_form_data) + + url = url_for( + "applications.update_new_application_step_1", + portfolio_id=portfolio.id, + application_id=application.id, + ) + post_url_assert_status(ccpo, url, 302, data=step_1_form_data) + post_url_assert_status(owner, url, 302, data=step_1_form_data) + post_url_assert_status(rando, url, 404, data=step_1_form_data) + + +# applications.view_new_application_step_2 +def test_applications_get_application_step_2(get_url_assert_status): + ccpo = user_with(PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT) + owner = user_with() + rando = user_with() + portfolio = PortfolioFactory.create(owner=owner) + application = ApplicationFactory.create(portfolio=portfolio) + + url = url_for( + "applications.view_new_application_step_2", + portfolio_id=portfolio.id, + application_id=application.id, + ) + get_url_assert_status(ccpo, url, 200) + get_url_assert_status(owner, url, 200) + get_url_assert_status(rando, url, 404) + + +# applications.update_new_application_step_2 +def test_applications_post_application_step_2(post_url_assert_status): + ccpo = user_with(PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT) + owner = user_with() + rando = user_with() + portfolio = PortfolioFactory.create(owner=owner) + application = ApplicationFactory.create(portfolio=portfolio) + step_2_form_data = { + "environment_names-0": "development", + "environment_names-1": "staging", + "environment_names-2": "production", + } + + url = url_for( + "applications.update_new_application_step_1", + portfolio_id=portfolio.id, + application_id=application.id, + ) + post_url_assert_status(ccpo, url, 302, data=step_2_form_data) + post_url_assert_status(owner, url, 302, data=step_2_form_data) + post_url_assert_status(rando, url, 404, data=step_2_form_data) # portfolios.invite_member @@ -319,7 +407,9 @@ def test_applications_new_access(get_url_assert_status): rando = user_with() portfolio = PortfolioFactory.create(owner=owner) - url = url_for("applications.new", portfolio_id=portfolio.id) + url = url_for( + "applications.create_new_application_step_1", portfolio_id=portfolio.id + ) get_url_assert_status(ccpo, url, 200) get_url_assert_status(owner, url, 200) get_url_assert_status(rando, url, 404)