Added test for summary endpoint with multiple reviews in the same day and multiple in the same day with reviewed/not reviewed counters

This commit is contained in:
Rui Alves 2024-11-24 13:22:10 +00:00
parent 6ad57af9b1
commit ea7fd7d6ef
3 changed files with 90 additions and 10 deletions

View File

@ -26,6 +26,7 @@ from frigate.api.defs.review_responses import (
) )
from frigate.api.defs.tags import Tags from frigate.api.defs.tags import Tags
from frigate.models import Recordings, ReviewSegment from frigate.models import Recordings, ReviewSegment
from frigate.review.maintainer import SeverityEnum
from frigate.util.builtin import get_tz_modifiers from frigate.util.builtin import get_tz_modifiers
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -161,7 +162,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "alert"), (ReviewSegment.severity == SeverityEnum.alert),
ReviewSegment.has_been_reviewed, ReviewSegment.has_been_reviewed,
) )
], ],
@ -173,7 +174,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "detection"), (ReviewSegment.severity == SeverityEnum.detection),
ReviewSegment.has_been_reviewed, ReviewSegment.has_been_reviewed,
) )
], ],
@ -185,7 +186,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "alert"), (ReviewSegment.severity == SeverityEnum.alert),
1, 1,
) )
], ],
@ -197,7 +198,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "detection"), (ReviewSegment.severity == SeverityEnum.detection),
1, 1,
) )
], ],
@ -247,7 +248,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "alert"), (ReviewSegment.severity == SeverityEnum.alert),
ReviewSegment.has_been_reviewed, ReviewSegment.has_been_reviewed,
) )
], ],
@ -259,7 +260,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "detection"), (ReviewSegment.severity == SeverityEnum.detection),
ReviewSegment.has_been_reviewed, ReviewSegment.has_been_reviewed,
) )
], ],
@ -271,7 +272,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "alert"), (ReviewSegment.severity == SeverityEnum.alert),
1, 1,
) )
], ],
@ -283,7 +284,7 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()):
None, None,
[ [
( (
(ReviewSegment.severity == "detection"), (ReviewSegment.severity == SeverityEnum.detection),
1, 1,
) )
], ],

View File

@ -149,6 +149,7 @@ class BaseTestHttp(unittest.TestCase):
start_time: datetime.datetime = datetime.datetime.now().timestamp(), start_time: datetime.datetime = datetime.datetime.now().timestamp(),
end_time: datetime.datetime = datetime.datetime.now().timestamp() + 20, end_time: datetime.datetime = datetime.datetime.now().timestamp() + 20,
severity: SeverityEnum = SeverityEnum.alert, severity: SeverityEnum = SeverityEnum.alert,
has_been_reviewed: bool = False,
) -> Event: ) -> Event:
"""Inserts a basic event model with a given id.""" """Inserts a basic event model with a given id."""
return ReviewSegment.insert( return ReviewSegment.insert(
@ -156,7 +157,7 @@ class BaseTestHttp(unittest.TestCase):
camera="front_door", camera="front_door",
start_time=start_time, start_time=start_time,
end_time=end_time, end_time=end_time,
has_been_reviewed=False, has_been_reviewed=has_been_reviewed,
severity=severity, severity=severity,
thumb_path=False, thumb_path=False,
data={}, data={},

View File

@ -1,4 +1,5 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
import json
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
@ -302,3 +303,80 @@ class TestHttpReview(BaseTestHttp):
}, },
} }
self.assertEqual(review_summary_response, expected_response) self.assertEqual(review_summary_response, expected_response)
def test_get_review_summary_multiple_in_same_day(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())
five_days_ago_ts = five_days_ago.timestamp()
for i in range(20):
super().insert_mock_review_segment(f"123456_{i}.random_alert", five_days_ago_ts, five_days_ago_ts, SeverityEnum.alert)
for i in range(15):
super().insert_mock_review_segment(f"123456_{i}.random_detection", five_days_ago_ts, five_days_ago_ts, SeverityEnum.detection)
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": 20,
"total_detection": 15,
},
}
self.assertEqual(review_summary_response, expected_response)
def test_get_review_summary_multiple_in_same_day_with_reviewed(self):
five_days_ago = datetime.today() - timedelta(days=5)
with TestClient(self.app) as client:
five_days_ago_ts = five_days_ago.timestamp()
for i in range(10):
super().insert_mock_review_segment(f"123456_{i}.random_alert_not_reviewed", five_days_ago_ts, five_days_ago_ts, SeverityEnum.alert, False)
for i in range(10):
super().insert_mock_review_segment(f"123456_{i}.random_alert_reviewed", five_days_ago_ts, five_days_ago_ts, SeverityEnum.alert, True)
for i in range(10):
super().insert_mock_review_segment(f"123456_{i}.random_detection_not_reviewed", five_days_ago_ts, five_days_ago_ts, SeverityEnum.detection, False)
for i in range(5):
super().insert_mock_review_segment(f"123456_{i}.random_detection_reviewed", five_days_ago_ts, five_days_ago_ts, SeverityEnum.detection, True)
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-19'
five_days_ago_formatted = five_days_ago.strftime("%Y-%m-%d")
expected_response = {
"last24Hours": {
"reviewed_alert": None,
"reviewed_detection": None,
"total_alert": None,
"total_detection": None,
},
five_days_ago_formatted: {
"day": five_days_ago_formatted,
"reviewed_alert": 10,
"reviewed_detection": 5,
"total_alert": 20,
"total_detection": 15,
},
}
self.assertEqual(review_summary_response, expected_response)