Use proper status names for requests

This commit is contained in:
richard-dds 2018-08-07 15:16:38 -04:00
parent ee8f37a862
commit 52bd76e6ee
4 changed files with 25 additions and 13 deletions

View File

@ -26,6 +26,12 @@ def deep_merge(source, destination: dict):
return _deep_merge(source, dict(destination))
class RequestStatuses(object):
@classmethod
def new(cls, status_name):
return RequestStatusEvent(new_status=status_name)
class Requests(object):
AUTO_APPROVE_THRESHOLD = 1000000
@ -33,8 +39,7 @@ class Requests(object):
def create(cls, creator_id, body):
request = Request(creator=creator_id, body=body)
status_event = RequestStatusEvent(new_status="incomplete")
request.status_events.append(status_event)
request.status_events.append(RequestStatuses.new("started"))
db.session.add(request)
db.session.commit()
@ -74,10 +79,12 @@ class Requests(object):
@classmethod
def submit(cls, request):
request.status_events.append(RequestStatusEvent(new_status="submitted"))
if Requests.should_auto_approve(request):
request.status_events.append(RequestStatusEvent(new_status="approved"))
request.status_events.append(
RequestStatuses.new("pending_financial_verification")
)
else:
request.status_events.append(RequestStatuses.new("pending_ccpo_approval"))
db.session.add(request)
db.session.commit()
@ -100,11 +107,6 @@ class Requests(object):
request.body = deep_merge(request_delta, request.body)
if Requests.should_allow_submission(request):
request.status_events.append(
RequestStatusEvent(new_status="pending_submission")
)
# Without this, sqlalchemy won't notice the change to request.body,
# since it doesn't track dictionary mutations by default.
flag_modified(request, "body")

View File

@ -23,22 +23,27 @@ def test_nonexistent_request_raises():
Requests.get(uuid4())
def test_new_request_has_started_status():
request = Requests.create(uuid4(), {})
assert request.status == "started"
def test_auto_approve_less_than_1m(new_request):
new_request.body = {"details_of_use": {"dollar_value": 999999}}
request = Requests.submit(new_request)
assert request.status == 'approved'
assert request.status == "pending_financial_verification"
def test_dont_auto_approve_if_dollar_value_is_1m_or_above(new_request):
new_request.body = {"details_of_use": {"dollar_value": 1000000}}
request = Requests.submit(new_request)
assert request.status == 'submitted'
assert request.status == "pending_ccpo_approval"
def test_dont_auto_approve_if_no_dollar_value_specified(new_request):
new_request.body = {"details_of_use": {}}
request = Requests.submit(new_request)
assert request.status == 'submitted'
assert request.status == "pending_ccpo_approval"

0
tests/models/__init__.py Normal file
View File

View File

@ -0,0 +1,5 @@
from tests.factories import RequestFactory
def test_started_request_requires_mo_action():
request = RequestFactory.create()