From b58aef2c6b65ea613cc3a3dd04e4aa63ed18471f Mon Sep 17 00:00:00 2001 From: dandds Date: Tue, 9 Apr 2019 11:02:47 -0400 Subject: [PATCH] domain methods for deleting apps and environments --- atst/domain/applications.py | 10 ++++++++++ atst/domain/environments.py | 10 ++++++++++ tests/domain/test_applications.py | 25 ++++++++++++++++++++++++- tests/domain/test_environments.py | 14 ++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/atst/domain/applications.py b/atst/domain/applications.py index 1639e7e2..bd94942b 100644 --- a/atst/domain/applications.py +++ b/atst/domain/applications.py @@ -67,3 +67,13 @@ class Applications(object): db.session.commit() return application + + @classmethod + def delete(cls, application): + for env in application.environments: + Environments.delete(env) + + application.deleted = True + + db.session.add(application) + db.session.commit() diff --git a/atst/domain/environments.py b/atst/domain/environments.py index 4682adcd..a89d0063 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -98,3 +98,13 @@ class Environments(object): @classmethod def revoke_access(cls, environment, target_user): EnvironmentRoles.delete(environment.id, target_user.id) + + @classmethod + def delete(cls, environment, commit=False): + environment.deleted = True + + db.session.add(environment) + if commit: + db.session.commit() + + return environment diff --git a/tests/domain/test_applications.py b/tests/domain/test_applications.py index 8756bb7c..31e32ba4 100644 --- a/tests/domain/test_applications.py +++ b/tests/domain/test_applications.py @@ -3,7 +3,12 @@ import pytest from atst.domain.applications import Applications from atst.domain.exceptions import NotFoundError -from tests.factories import ApplicationFactory, UserFactory, PortfolioFactory +from tests.factories import ( + ApplicationFactory, + UserFactory, + PortfolioFactory, + EnvironmentFactory, +) def test_create_application_with_multiple_environments(): @@ -62,3 +67,21 @@ def test_get_excludes_deleted(): app = ApplicationFactory.create(deleted=True) with pytest.raises(NotFoundError): Applications.get(app.id) + + +def test_delete_application(session): + app = ApplicationFactory.create() + env1 = EnvironmentFactory.create(application=app) + env2 = EnvironmentFactory.create(application=app) + assert not app.deleted + assert not env1.deleted + assert not env2.deleted + + Applications.delete(app) + + assert app.deleted + assert env1.deleted + assert env2.deleted + + # changes are flushed + assert not session.dirty diff --git a/tests/domain/test_environments.py b/tests/domain/test_environments.py index c51b878c..99f73f9d 100644 --- a/tests/domain/test_environments.py +++ b/tests/domain/test_environments.py @@ -202,3 +202,17 @@ def test_get_excludes_deleted(): ) with pytest.raises(NotFoundError): Environments.get(env.id) + + +def test_delete_environment(session): + env = EnvironmentFactory.create(application=ApplicationFactory.create()) + assert not env.deleted + Environments.delete(env) + assert env.deleted + # did not flush + assert env in session.dirty + + Environments.delete(env, commit=True) + assert env.deleted + # flushed the change + assert not session.dirty