58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""SettingsRepository 测试。"""
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from src.settings_repository import SettingsRepository
|
|
|
|
|
|
class SettingsRepositoryTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self._temporary_directory = tempfile.TemporaryDirectory()
|
|
self.db_path = Path(self._temporary_directory.name) / "client.db"
|
|
self.repository = SettingsRepository(self.db_path)
|
|
|
|
def tearDown(self) -> None:
|
|
self._temporary_directory.cleanup()
|
|
|
|
def test_get_returns_default_for_missing_key(self) -> None:
|
|
self.assertEqual(
|
|
self.repository.get("automation.max_retries", default=3), 3
|
|
)
|
|
|
|
def test_set_get_and_update_json_value(self) -> None:
|
|
first = self.repository.set(
|
|
"client.info",
|
|
{"device_id": "CLIENT-001", "device_name": "办公室电脑"},
|
|
"2026-08-06T08:00:00Z",
|
|
)
|
|
self.assertEqual(first.updated_at, "2026-08-06T08:00:00Z")
|
|
self.assertEqual(
|
|
self.repository.get("client.info")["device_name"], "办公室电脑"
|
|
)
|
|
|
|
self.repository.set(
|
|
"client.info",
|
|
{"device_id": "CLIENT-001", "device_name": "仓库电脑"},
|
|
"2026-08-06T09:00:00Z",
|
|
)
|
|
record = self.repository.get_record("client.info")
|
|
self.assertEqual(record.value["device_name"], "仓库电脑")
|
|
self.assertEqual(record.updated_at, "2026-08-06T09:00:00Z")
|
|
|
|
def test_delete_reports_whether_record_existed(self) -> None:
|
|
self.repository.set("automation.dry_run", True)
|
|
|
|
self.assertTrue(self.repository.delete("automation.dry_run"))
|
|
self.assertFalse(self.repository.delete("automation.dry_run"))
|
|
self.assertIsNone(self.repository.get("automation.dry_run"))
|
|
|
|
def test_empty_setting_key_is_rejected(self) -> None:
|
|
with self.assertRaisesRegex(ValueError, "setting_key"):
|
|
self.repository.set(" ", True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|