From 14d03e7e660e1f061c11ded9b2fbd756f11d7b43 Mon Sep 17 00:00:00 2001 From: dandds Date: Fri, 7 Sep 2018 10:28:03 -0400 Subject: [PATCH] requests domain can approve a request for financial verification --- atst/domain/requests.py | 12 ++++++++++++ tests/domain/test_requests.py | 11 +++++++++++ tests/factories.py | 32 +++++++++++++++++++++++--------- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/atst/domain/requests.py b/atst/domain/requests.py index 5f7e68bc..7c2897cf 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -12,6 +12,7 @@ from atst.domain.workspaces import Workspaces from atst.models.request import Request from atst.models.request_revision import RequestRevision from atst.models.request_status_event import RequestStatusEvent, RequestStatus +from atst.models.request_review import RequestReview from atst.utils import deep_merge from .exceptions import NotFoundError, UnauthorizedError @@ -260,3 +261,14 @@ WHERE requests_with_status.status = :status db.session.commit() return request + + @classmethod + def approve_for_financial_verification(cls, request, review_data): + Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION) + + request.latest_status.review = RequestReview(**review_data) + + db.session.add(request) + db.session.commit() + + return request diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index e938d7bc..a0fd97ed 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -13,6 +13,7 @@ from tests.factories import ( RequestStatusEventFactory, TaskOrderFactory, RequestRevisionFactory, + RequestReviewFactory, ) @@ -178,3 +179,13 @@ def test_set_status_sets_revision(): request = RequestFactory.create() Requests.set_status(request, RequestStatus.APPROVED) assert request.latest_revision == request.status_events[-1].revision + + +def test_approve_for_financial_verification(): + request = RequestFactory.create() + review_data = RequestReviewFactory.dictionary() + Requests.approve_for_financial_verification(request, review_data) + assert request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION + current_review = request.latest_status.review + assert current_review.fname_mao == review_data["fname_mao"] + diff --git a/tests/factories.py b/tests/factories.py index e2b659a7..e8165393 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -17,14 +17,20 @@ from atst.models.workspace import Workspace from atst.domain.roles import Roles -class RoleFactory(factory.alchemy.SQLAlchemyModelFactory): +class Base(factory.alchemy.SQLAlchemyModelFactory): + @classmethod + def dictionary(cls, **attrs): + return factory.build(dict, FACTORY_CLASS=cls, **attrs) + + +class RoleFactory(Base): class Meta: model = Role permissions = [] -class UserFactory(factory.alchemy.SQLAlchemyModelFactory): +class UserFactory(Base): class Meta: model = User @@ -41,7 +47,7 @@ class UserFactory(factory.alchemy.SQLAlchemyModelFactory): return cls.create(atat_role=role, **kwargs) -class RequestStatusEventFactory(factory.alchemy.SQLAlchemyModelFactory): +class RequestStatusEventFactory(Base): class Meta: model = RequestStatusEvent @@ -49,19 +55,27 @@ class RequestStatusEventFactory(factory.alchemy.SQLAlchemyModelFactory): sequence = 1 -class RequestRevisionFactory(factory.alchemy.SQLAlchemyModelFactory): +class RequestRevisionFactory(Base): class Meta: model = RequestRevision id = factory.Sequence(lambda x: uuid4()) -class RequestReviewFactory(factory.alchemy.SQLAlchemyModelFactory): +class RequestReviewFactory(Base): class Meta: model = RequestReview + comments = factory.Faker("sentence") + fname_mao = factory.Faker("first_name") + lname_mao = factory.Faker("last_name") + email_mao = factory.Faker("email") + phone_mao = factory.Faker("phone_number") + fname_ccpo = factory.Faker("first_name") + lname_ccpo = factory.Faker("last_name") -class RequestFactory(factory.alchemy.SQLAlchemyModelFactory): + +class RequestFactory(Base): class Meta: model = Request @@ -133,17 +147,17 @@ class RequestFactory(factory.alchemy.SQLAlchemyModelFactory): return RequestRevisionFactory.build(**data) -class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory): +class PENumberFactory(Base): class Meta: model = PENumber -class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory): +class TaskOrderFactory(Base): class Meta: model = TaskOrder -class WorkspaceFactory(factory.alchemy.SQLAlchemyModelFactory): +class WorkspaceFactory(Base): class Meta: model = Workspace