diff --git a/atst/domain/requests.py b/atst/domain/requests.py index 5c04d3c7..f9e83fe3 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -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") diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index 0597714a..14c4127e 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -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" diff --git a/tests/models/__init__.py b/tests/models/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/models/test_requests.py b/tests/models/test_requests.py new file mode 100644 index 00000000..245c587e --- /dev/null +++ b/tests/models/test_requests.py @@ -0,0 +1,5 @@ +from tests.factories import RequestFactory + + +def test_started_request_requires_mo_action(): + request = RequestFactory.create()