test: rewrite retain_policy tests to work outside Docker devcontainer

Test RecordConfig directly instead of FrigateConfig to avoid dependencies
on Docker-only paths (/labelmap.txt, /config) and detector runtimes.
Added enum value and serialization roundtrip tests.
This commit is contained in:
jon 2026-03-01 21:04:10 -06:00
parent 202db2cc0d
commit 71645b07df

View File

@ -1,49 +1,47 @@
import unittest import unittest
from frigate.config import FrigateConfig from pydantic import ValidationError
from frigate.config.camera.record import RecordConfig, RetainPolicyEnum
class TestRetainPolicyConfig(unittest.TestCase): class TestRetainPolicyConfig(unittest.TestCase):
def setUp(self): """Tests for the retain_policy field on RecordConfig."""
self.base_config = {
"mqtt": {"host": "mqtt"},
"cameras": {
"front_door": {
"ffmpeg": {
"inputs": [
{"path": "rtsp://10.0.0.1:554/video", "roles": ["detect"]}
]
},
"detect": {"height": 1080, "width": 1920, "fps": 5},
}
},
}
def test_default_retain_policy_is_time(self): def test_default_retain_policy_is_time(self):
config = FrigateConfig(**self.base_config) config = RecordConfig()
assert config.record.retain_policy.value == "time" assert config.retain_policy == RetainPolicyEnum.time
def test_continuous_rollover_policy(self): def test_continuous_rollover_policy(self):
self.base_config["record"] = { config = RecordConfig(
"enabled": True, enabled=True,
"retain_policy": "continuous_rollover", retain_policy="continuous_rollover",
} )
config = FrigateConfig(**self.base_config) assert config.retain_policy == RetainPolicyEnum.continuous_rollover
assert config.record.retain_policy.value == "continuous_rollover"
def test_continuous_rollover_ignores_continuous_days(self): def test_continuous_rollover_ignores_continuous_days(self):
self.base_config["record"] = { """continuous.days is preserved even in rollover mode (just unused by cleanup)."""
"enabled": True, config = RecordConfig(
"retain_policy": "continuous_rollover", enabled=True,
"continuous": {"days": 30}, retain_policy="continuous_rollover",
} continuous={"days": 30},
config = FrigateConfig(**self.base_config) )
assert config.record.retain_policy.value == "continuous_rollover" assert config.retain_policy == RetainPolicyEnum.continuous_rollover
assert config.record.continuous.days == 30 assert config.continuous.days == 30
def test_invalid_retain_policy_rejected(self): def test_invalid_retain_policy_rejected(self):
self.base_config["record"] = { with self.assertRaises(ValidationError):
"retain_policy": "invalid_value", RecordConfig(retain_policy="invalid_value")
}
with self.assertRaises(Exception): def test_retain_policy_enum_values(self):
FrigateConfig(**self.base_config) """Verify all expected enum values exist."""
assert RetainPolicyEnum.time.value == "time"
assert RetainPolicyEnum.continuous_rollover.value == "continuous_rollover"
def test_retain_policy_roundtrip(self):
"""Config can be serialized and deserialized with retain_policy."""
config = RecordConfig(retain_policy="continuous_rollover")
dumped = config.model_dump()
assert dumped["retain_policy"] == "continuous_rollover"
restored = RecordConfig(**dumped)
assert restored.retain_policy == RetainPolicyEnum.continuous_rollover