"""Tests for SnapshotSettingsContext in local_deep_research.settings.manager.""" from unittest.mock import patch from local_deep_research.settings.manager import SnapshotSettingsContext class TestSnapshotSettingsContext: # ------------------------------------------------------------------ # 1. Plain scalar values are returned as-is # ------------------------------------------------------------------ def test_plain_values(self): ctx = SnapshotSettingsContext(snapshot={"key": "val"}) assert ctx.get_setting("key") == "val" # ------------------------------------------------------------------ # 2. Dict objects with "value" key are unwrapped # ------------------------------------------------------------------ def test_unwrap_value_objects(self): snapshot = {"key": {"value": "val", "ui_element": "text"}} ctx = SnapshotSettingsContext(snapshot=snapshot) assert ctx.get_setting("key") == "val" # ------------------------------------------------------------------ # 3. Missing key returns the supplied default # ------------------------------------------------------------------ def test_missing_key_returns_default(self): ctx = SnapshotSettingsContext(snapshot={}) assert ctx.get_setting("absent", "fallback") == "fallback" # ------------------------------------------------------------------ # 4. Missing key logs at DEBUG level by default # ------------------------------------------------------------------ def test_missing_key_logs_at_default_debug_level(self): ctx = SnapshotSettingsContext(snapshot={}) with patch( "local_deep_research.settings.manager.logger" ) as mock_logger: ctx.get_setting("absent", "fallback") mock_logger.log.assert_called_once() call_args = mock_logger.log.call_args assert call_args[0][0] == "DEBUG" # ------------------------------------------------------------------ # 5. Missing key logs at WARNING level when configured # ------------------------------------------------------------------ def test_missing_key_logs_at_warning_level(self): ctx = SnapshotSettingsContext( snapshot={}, missing_key_log_level="WARNING" ) with patch( "local_deep_research.settings.manager.logger" ) as mock_logger: ctx.get_setting("absent") mock_logger.log.assert_called_once() call_args = mock_logger.log.call_args assert call_args[0][0] == "WARNING" # ------------------------------------------------------------------ # 6. username attribute is accessible and defaults to None # ------------------------------------------------------------------ def test_username_stored(self): ctx_default = SnapshotSettingsContext(snapshot={}) assert ctx_default.username is None ctx_with_user = SnapshotSettingsContext(snapshot={}, username="alice") assert ctx_with_user.username == "alice" # ------------------------------------------------------------------ # 7. Passing None snapshot results in empty .values, no crash # ------------------------------------------------------------------ def test_none_snapshot(self): ctx = SnapshotSettingsContext(snapshot=None) assert ctx.values == {} assert ctx.get_setting("anything", "default") == "default" # ------------------------------------------------------------------ # 8. .snapshot stores the original dict unchanged # ------------------------------------------------------------------ def test_snapshot_attribute_preserved(self): original = {"key": {"value": "val", "ui_element": "text"}} ctx = SnapshotSettingsContext(snapshot=original) assert ctx.snapshot is original