requests domain can approve a request for financial verification

This commit is contained in:
dandds 2018-09-07 10:28:03 -04:00
parent 8e000e3e77
commit 14d03e7e66
3 changed files with 46 additions and 9 deletions

View File

@ -12,6 +12,7 @@ from atst.domain.workspaces import Workspaces
from atst.models.request import Request from atst.models.request import Request
from atst.models.request_revision import RequestRevision from atst.models.request_revision import RequestRevision
from atst.models.request_status_event import RequestStatusEvent, RequestStatus from atst.models.request_status_event import RequestStatusEvent, RequestStatus
from atst.models.request_review import RequestReview
from atst.utils import deep_merge from atst.utils import deep_merge
from .exceptions import NotFoundError, UnauthorizedError from .exceptions import NotFoundError, UnauthorizedError
@ -260,3 +261,14 @@ WHERE requests_with_status.status = :status
db.session.commit() db.session.commit()
return request 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

View File

@ -13,6 +13,7 @@ from tests.factories import (
RequestStatusEventFactory, RequestStatusEventFactory,
TaskOrderFactory, TaskOrderFactory,
RequestRevisionFactory, RequestRevisionFactory,
RequestReviewFactory,
) )
@ -178,3 +179,13 @@ def test_set_status_sets_revision():
request = RequestFactory.create() request = RequestFactory.create()
Requests.set_status(request, RequestStatus.APPROVED) Requests.set_status(request, RequestStatus.APPROVED)
assert request.latest_revision == request.status_events[-1].revision 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"]

View File

@ -17,14 +17,20 @@ from atst.models.workspace import Workspace
from atst.domain.roles import Roles 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: class Meta:
model = Role model = Role
permissions = [] permissions = []
class UserFactory(factory.alchemy.SQLAlchemyModelFactory): class UserFactory(Base):
class Meta: class Meta:
model = User model = User
@ -41,7 +47,7 @@ class UserFactory(factory.alchemy.SQLAlchemyModelFactory):
return cls.create(atat_role=role, **kwargs) return cls.create(atat_role=role, **kwargs)
class RequestStatusEventFactory(factory.alchemy.SQLAlchemyModelFactory): class RequestStatusEventFactory(Base):
class Meta: class Meta:
model = RequestStatusEvent model = RequestStatusEvent
@ -49,19 +55,27 @@ class RequestStatusEventFactory(factory.alchemy.SQLAlchemyModelFactory):
sequence = 1 sequence = 1
class RequestRevisionFactory(factory.alchemy.SQLAlchemyModelFactory): class RequestRevisionFactory(Base):
class Meta: class Meta:
model = RequestRevision model = RequestRevision
id = factory.Sequence(lambda x: uuid4()) id = factory.Sequence(lambda x: uuid4())
class RequestReviewFactory(factory.alchemy.SQLAlchemyModelFactory): class RequestReviewFactory(Base):
class Meta: class Meta:
model = RequestReview 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: class Meta:
model = Request model = Request
@ -133,17 +147,17 @@ class RequestFactory(factory.alchemy.SQLAlchemyModelFactory):
return RequestRevisionFactory.build(**data) return RequestRevisionFactory.build(**data)
class PENumberFactory(factory.alchemy.SQLAlchemyModelFactory): class PENumberFactory(Base):
class Meta: class Meta:
model = PENumber model = PENumber
class TaskOrderFactory(factory.alchemy.SQLAlchemyModelFactory): class TaskOrderFactory(Base):
class Meta: class Meta:
model = TaskOrder model = TaskOrder
class WorkspaceFactory(factory.alchemy.SQLAlchemyModelFactory): class WorkspaceFactory(Base):
class Meta: class Meta:
model = Workspace model = Workspace