mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-17 16:44:29 +03:00
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:
parent
6ad57af9b1
commit
ea7fd7d6ef
@ -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,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|||||||
@ -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={},
|
||||||
|
|||||||
@ -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)
|
||||||
Loading…
Reference in New Issue
Block a user