blakeblackshear.frigate/frigate/test/test_preview_loader.py
Josh Hawkins c49b2d5336
Offline preview image (#21752)
* use latest preview frame for latest image when camera is offline

* remove frame extraction logic

* tests

* frontend

* add description to api endpoint
2026-01-22 10:21:41 -07:00

81 lines
2.6 KiB
Python

import os
import shutil
import unittest
from frigate.output.preview import (
PREVIEW_CACHE_DIR,
PREVIEW_FRAME_TYPE,
get_most_recent_preview_frame,
)
class TestPreviewLoader(unittest.TestCase):
def setUp(self):
if os.path.exists(PREVIEW_CACHE_DIR):
shutil.rmtree(PREVIEW_CACHE_DIR)
os.makedirs(PREVIEW_CACHE_DIR)
def tearDown(self):
if os.path.exists(PREVIEW_CACHE_DIR):
shutil.rmtree(PREVIEW_CACHE_DIR)
def test_get_most_recent_preview_frame_missing(self):
self.assertIsNone(get_most_recent_preview_frame("test_camera"))
def test_get_most_recent_preview_frame_exists(self):
camera = "test_camera"
# create dummy preview files
for ts in ["1000.0", "2000.0", "1500.0"]:
with open(
os.path.join(
PREVIEW_CACHE_DIR, f"preview_{camera}-{ts}.{PREVIEW_FRAME_TYPE}"
),
"w",
) as f:
f.write(f"test_{ts}")
expected_path = os.path.join(
PREVIEW_CACHE_DIR, f"preview_{camera}-2000.0.{PREVIEW_FRAME_TYPE}"
)
self.assertEqual(get_most_recent_preview_frame(camera), expected_path)
def test_get_most_recent_preview_frame_before(self):
camera = "test_camera"
# create dummy preview files
for ts in ["1000.0", "2000.0"]:
with open(
os.path.join(
PREVIEW_CACHE_DIR, f"preview_{camera}-{ts}.{PREVIEW_FRAME_TYPE}"
),
"w",
) as f:
f.write(f"test_{ts}")
# Test finding frame before or at 1500
expected_path = os.path.join(
PREVIEW_CACHE_DIR, f"preview_{camera}-1000.0.{PREVIEW_FRAME_TYPE}"
)
self.assertEqual(
get_most_recent_preview_frame(camera, before=1500.0), expected_path
)
# Test finding frame before or at 999
self.assertIsNone(get_most_recent_preview_frame(camera, before=999.0))
def test_get_most_recent_preview_frame_other_camera(self):
camera = "test_camera"
other_camera = "other_camera"
with open(
os.path.join(
PREVIEW_CACHE_DIR, f"preview_{other_camera}-3000.0.{PREVIEW_FRAME_TYPE}"
),
"w",
) as f:
f.write("test")
self.assertIsNone(get_most_recent_preview_frame(camera))
def test_get_most_recent_preview_frame_no_directory(self):
shutil.rmtree(PREVIEW_CACHE_DIR)
self.assertIsNone(get_most_recent_preview_frame("test_camera"))