Add migration for enforcing uniqueness of an application name within a portfolio and update create/update Applicaiton domain methods.
This commit is contained in:
@@ -5,7 +5,7 @@ from atst.models import CSPRole, ApplicationRoleStatus
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atst.domain.exceptions import AlreadyExistsError, NotFoundError
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
|
||||
from tests.factories import (
|
||||
@@ -177,3 +177,22 @@ def test_invite_to_nonexistent_environment():
|
||||
{"environment_id": uuid4(), "role": CSPRole.BASIC_ACCESS.value},
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
def test_create_does_not_duplicate_names_within_portfolio():
|
||||
portfolio = PortfolioFactory.create()
|
||||
name = "An Awesome Application"
|
||||
|
||||
assert Applications.create(portfolio.owner, portfolio, name, "")
|
||||
with pytest.raises(AlreadyExistsError):
|
||||
Applications.create(portfolio.owner, portfolio, name, "")
|
||||
|
||||
|
||||
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})
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import pytest
|
||||
import random
|
||||
from uuid import uuid4
|
||||
|
||||
from atst.domain.exceptions import NotFoundError, UnauthorizedError
|
||||
@@ -97,7 +98,7 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_admin(
|
||||
Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"My Application",
|
||||
"My Application %s" % (random.randrange(1, 1000)),
|
||||
"My application",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
@@ -120,7 +121,7 @@ def test_scoped_portfolio_returns_all_applications_for_portfolio_owner(
|
||||
Applications.create(
|
||||
portfolio.owner,
|
||||
portfolio,
|
||||
"My Application",
|
||||
"My Application %s" % (random.randrange(1, 1000)),
|
||||
"My application",
|
||||
["dev", "staging", "prod"],
|
||||
)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
from unittest.mock import Mock
|
||||
|
||||
import pytest
|
||||
import random
|
||||
|
||||
from flask import url_for, Response
|
||||
|
||||
@@ -264,26 +265,28 @@ def test_applications_post_application_step_1(post_url_assert_status):
|
||||
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",
|
||||
}
|
||||
|
||||
def _form_data():
|
||||
return {
|
||||
"name": "Test Application %s" % (random.randrange(1, 1000)),
|
||||
"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)
|
||||
post_url_assert_status(ccpo, url, 302, data=_form_data())
|
||||
post_url_assert_status(owner, url, 302, data=_form_data())
|
||||
post_url_assert_status(rando, url, 404, data=_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)
|
||||
post_url_assert_status(ccpo, url, 302, data=_form_data())
|
||||
post_url_assert_status(owner, url, 302, data=_form_data())
|
||||
post_url_assert_status(rando, url, 404, data=_form_data())
|
||||
|
||||
|
||||
# applications.view_new_application_step_2
|
||||
|
Reference in New Issue
Block a user