requests domain can approve a request for financial verification
This commit is contained in:
parent
8e000e3e77
commit
14d03e7e66
@ -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
|
||||||
|
@ -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"]
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user