Requests.status_count can be scoped to creator
This commit is contained in:
parent
3a77e07c3f
commit
920ad1c554
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user