mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-17 16:44:29 +03:00
Added tests for review summary endpoint (multiple days with alerts in the last month)
This commit is contained in:
parent
731a887d98
commit
22408e9e48
@ -230,6 +230,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
|
|||||||
label_clause = reduce(operator.or_, label_clauses)
|
label_clause = reduce(operator.or_, label_clauses)
|
||||||
clauses.append((label_clause))
|
clauses.append((label_clause))
|
||||||
|
|
||||||
|
day_in_seconds = 60 * 60 * 24
|
||||||
last_month = (
|
last_month = (
|
||||||
ReviewSegment.select(
|
ReviewSegment.select(
|
||||||
fn.strftime(
|
fn.strftime(
|
||||||
@ -292,7 +293,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
|
|||||||
)
|
)
|
||||||
.where(reduce(operator.and_, clauses))
|
.where(reduce(operator.and_, clauses))
|
||||||
.group_by(
|
.group_by(
|
||||||
(ReviewSegment.start_time + seconds_offset).cast("int") / (3600 * 24),
|
(ReviewSegment.start_time + seconds_offset).cast("int") / day_in_seconds,
|
||||||
)
|
)
|
||||||
.order_by(ReviewSegment.start_time.desc())
|
.order_by(ReviewSegment.start_time.desc())
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import datetime
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
|
|
||||||
# Does not return any data point since the end time (before parameter) is not passed and the review segment end_time is 2 seconds from now
|
# Does not return any data point since the end time (before parameter) is not passed and the review segment end_time is 2 seconds from now
|
||||||
def test_get_review_no_filters_no_matches(self):
|
def test_get_review_no_filters_no_matches(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
super().insert_mock_review_segment("123456.random", now, now + 2)
|
super().insert_mock_review_segment("123456.random", now, now + 2)
|
||||||
@ -28,7 +28,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert len(reviews_in_response) == 0
|
assert len(reviews_in_response) == 0
|
||||||
|
|
||||||
def test_get_review_no_filters(self):
|
def test_get_review_no_filters(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
super().insert_mock_review_segment("123456.random", now - 2, now - 1)
|
super().insert_mock_review_segment("123456.random", now - 2, now - 1)
|
||||||
@ -38,7 +38,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert len(reviews_in_response) == 1
|
assert len(reviews_in_response) == 1
|
||||||
|
|
||||||
def test_get_review_with_time_filter_no_matches(self):
|
def test_get_review_with_time_filter_no_matches(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -53,7 +53,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert len(reviews_in_response) == 0
|
assert len(reviews_in_response) == 0
|
||||||
|
|
||||||
def test_get_review_with_time_filter(self):
|
def test_get_review_with_time_filter(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -69,7 +69,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert reviews_in_response[0]["id"] == id
|
assert reviews_in_response[0]["id"] == id
|
||||||
|
|
||||||
def test_get_review_with_limit_filter(self):
|
def test_get_review_with_limit_filter(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -88,7 +88,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert reviews_in_response[0]["id"] == id2
|
assert reviews_in_response[0]["id"] == id2
|
||||||
|
|
||||||
def test_get_review_with_severity_filters_no_matches(self):
|
def test_get_review_with_severity_filters_no_matches(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -105,7 +105,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert reviews_in_response[0]["id"] == id
|
assert reviews_in_response[0]["id"] == id
|
||||||
|
|
||||||
def test_get_review_with_severity_filters(self):
|
def test_get_review_with_severity_filters(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -121,7 +121,7 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
assert len(reviews_in_response) == 0
|
assert len(reviews_in_response) == 0
|
||||||
|
|
||||||
def test_get_review_with_all_filters(self):
|
def test_get_review_with_all_filters(self):
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.now().timestamp()
|
||||||
|
|
||||||
with TestClient(self.app) as client:
|
with TestClient(self.app) as client:
|
||||||
id = "123456.random"
|
id = "123456.random"
|
||||||
@ -158,21 +158,22 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
review_summary_request = client.get("/review/summary", params=params)
|
review_summary_request = client.get("/review/summary", params=params)
|
||||||
assert review_summary_request.status_code == 200
|
assert review_summary_request.status_code == 200
|
||||||
review_summary_response = review_summary_request.json()
|
review_summary_response = review_summary_request.json()
|
||||||
today = datetime.date.today().strftime('%Y-%m-%d') # e.g. '2024-11-24'
|
# e.g. '2024-11-24'
|
||||||
|
today_formatted = datetime.date.today().strftime("%Y-%m-%d")
|
||||||
expected_response = {
|
expected_response = {
|
||||||
'last24Hours': {
|
"last24Hours": {
|
||||||
'reviewed_alert': 0,
|
"reviewed_alert": 0,
|
||||||
'reviewed_detection': 0,
|
"reviewed_detection": 0,
|
||||||
'total_alert': 1,
|
"total_alert": 1,
|
||||||
'total_detection': 0
|
"total_detection": 0,
|
||||||
|
},
|
||||||
|
today_formatted: {
|
||||||
|
"day": today_formatted,
|
||||||
|
"reviewed_alert": 0,
|
||||||
|
"reviewed_detection": 0,
|
||||||
|
"total_alert": 1,
|
||||||
|
"total_detection": 0,
|
||||||
},
|
},
|
||||||
today: {
|
|
||||||
'day': today,
|
|
||||||
'reviewed_alert': 0,
|
|
||||||
'reviewed_detection': 0,
|
|
||||||
'total_alert': 1,
|
|
||||||
'total_detection': 0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
self.assertEqual(review_summary_response, expected_response)
|
self.assertEqual(review_summary_response, expected_response)
|
||||||
|
|
||||||
@ -182,20 +183,59 @@ class TestHttpReview(BaseTestHttp):
|
|||||||
review_summary_request = client.get("/review/summary")
|
review_summary_request = client.get("/review/summary")
|
||||||
assert review_summary_request.status_code == 200
|
assert review_summary_request.status_code == 200
|
||||||
review_summary_response = review_summary_request.json()
|
review_summary_response = review_summary_request.json()
|
||||||
today = datetime.date.today().strftime('%Y-%m-%d') # e.g. '2024-11-24'
|
# e.g. '2024-11-24'
|
||||||
|
today_formatted = datetime.date.today().strftime("%Y-%m-%d")
|
||||||
expected_response = {
|
expected_response = {
|
||||||
'last24Hours': {
|
"last24Hours": {
|
||||||
'reviewed_alert': 0,
|
"reviewed_alert": 0,
|
||||||
'reviewed_detection': 0,
|
"reviewed_detection": 0,
|
||||||
'total_alert': 1,
|
"total_alert": 1,
|
||||||
'total_detection': 0
|
"total_detection": 0,
|
||||||
|
},
|
||||||
|
today_formatted: {
|
||||||
|
"day": today_formatted,
|
||||||
|
"reviewed_alert": 0,
|
||||||
|
"reviewed_detection": 0,
|
||||||
|
"total_alert": 1,
|
||||||
|
"total_detection": 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
self.assertEqual(review_summary_response, expected_response)
|
||||||
|
|
||||||
|
def test_get_review_summary_multiple_days(self):
|
||||||
|
now = datetime.now()
|
||||||
|
five_days_ago = datetime.today() - timedelta(days=5)
|
||||||
|
|
||||||
|
with TestClient(self.app) as client:
|
||||||
|
super().insert_mock_review_segment("123456.random", now.timestamp() - 2, now.timestamp() - 1)
|
||||||
|
super().insert_mock_review_segment("654321.random", five_days_ago.timestamp(), five_days_ago.timestamp() + 1)
|
||||||
|
review_summary_request = client.get("/review/summary")
|
||||||
|
assert review_summary_request.status_code == 200
|
||||||
|
review_summary_response = review_summary_request.json()
|
||||||
|
# e.g. '2024-11-24'
|
||||||
|
today_formatted = now.strftime("%Y-%m-%d")
|
||||||
|
# e.g. '2024-11-19'
|
||||||
|
five_days_ago_formatted = five_days_ago.strftime("%Y-%m-%d")
|
||||||
|
expected_response = {
|
||||||
|
"last24Hours": {
|
||||||
|
"reviewed_alert": 0,
|
||||||
|
"reviewed_detection": 0,
|
||||||
|
"total_alert": 1,
|
||||||
|
"total_detection": 0,
|
||||||
|
},
|
||||||
|
today_formatted: {
|
||||||
|
"day": today_formatted,
|
||||||
|
"reviewed_alert": 0,
|
||||||
|
"reviewed_detection": 0,
|
||||||
|
"total_alert": 1,
|
||||||
|
"total_detection": 0,
|
||||||
|
},
|
||||||
|
five_days_ago_formatted: {
|
||||||
|
"day": five_days_ago_formatted,
|
||||||
|
"reviewed_alert": 0,
|
||||||
|
"reviewed_detection": 0,
|
||||||
|
"total_alert": 1,
|
||||||
|
"total_detection": 0,
|
||||||
},
|
},
|
||||||
today: {
|
|
||||||
'day': today,
|
|
||||||
'reviewed_alert': 0,
|
|
||||||
'reviewed_detection': 0,
|
|
||||||
'total_alert': 1,
|
|
||||||
'total_detection': 0
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
self.assertEqual(review_summary_response, expected_response)
|
self.assertEqual(review_summary_response, expected_response)
|
||||||
Loading…
Reference in New Issue
Block a user