Requests.status_count can be scoped to creator

This commit is contained in:
dandds 2018-08-15 11:43:12 -04:00
parent 3a77e07c3f
commit 920ad1c554
2 changed files with 24 additions and 7 deletions

View File

@ -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

View File

@ -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