From 920ad1c5544aff8226428be5dcaab4f0eab1bd56 Mon Sep 17 00:00:00 2001 From: dandds Date: Wed, 15 Aug 2018 11:43:12 -0400 Subject: [PATCH] Requests.status_count can be scoped to creator --- atst/domain/requests.py | 20 +++++++++++++------- tests/domain/test_requests.py | 11 +++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/atst/domain/requests.py b/atst/domain/requests.py index f36551d3..fa122d71 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -158,19 +158,25 @@ class Requests(object): return request.status == RequestStatus.PENDING_CCPO_APPROVAL @classmethod - def status_count(cls, status): - raw = text(""" + def status_count(cls, status, creator=None): + if isinstance(status, Enum): + status = status.name + bindings = {"status": status} + raw = """ SELECT count(requests_with_status.id) FROM ( SELECT DISTINCT ON (rse.request_id) r.*, rse.new_status as status FROM request_status_events rse JOIN requests r ON r.id = rse.request_id ORDER BY rse.request_id, rse.sequence DESC ) as requests_with_status -WHERE requests_with_status.status = :status; - """) - if isinstance(status, Enum): - status = status.name - results = db.session.execute(raw, {"status": status}).fetchone() +WHERE requests_with_status.status = :status + """ + + if creator: + raw += " AND requests_with_status.user_id = :user_id" + bindings["user_id"] = creator.id + + results = db.session.execute(text(raw), bindings).fetchone() (count,) = results return count diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index 3e4e66e4..332e3c6c 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -77,3 +77,14 @@ def test_status_count(session): assert Requests.status_count(RequestStatus.PENDING_FINANCIAL_VERIFICATION) == 1 assert Requests.status_count(RequestStatus.STARTED) == 1 assert Requests.in_progress_count() == 2 + +def test_status_count_scoped_to_creator(session): + # make sure table is empty + session.query(Request).delete() + + user = UserFactory.create() + request1 = RequestFactory.create() + request2 = RequestFactory.create(creator=user) + + assert Requests.status_count(RequestStatus.STARTED) == 2 + assert Requests.status_count(RequestStatus.STARTED, creator=user) == 1