Use proper status names for requests
This commit is contained in:
parent
ee8f37a862
commit
52bd76e6ee
@ -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")
|
||||
|
@ -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
0
tests/models/__init__.py
Normal file
5
tests/models/test_requests.py
Normal file
5
tests/models/test_requests.py
Normal file
@ -0,0 +1,5 @@
|
||||
from tests.factories import RequestFactory
|
||||
|
||||
|
||||
def test_started_request_requires_mo_action():
|
||||
request = RequestFactory.create()
|
Loading…
x
Reference in New Issue
Block a user