2026-08-06 16:21:39 +08:00
|
|
|
"""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"))
|
|
|
|
|
|
2026-08-06 17:57:49 +08:00
|
|
|
def test_set_many_saves_values_with_one_timestamp(self) -> None:
|
|
|
|
|
records = self.repository.set_many(
|
|
|
|
|
{
|
|
|
|
|
"admin.client_id": "CLIENT-001",
|
|
|
|
|
"admin.client_name": "办公室电脑",
|
|
|
|
|
},
|
|
|
|
|
"2026-08-06T10:00:00Z",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(len(records), 2)
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
self.repository.get("admin.client_id"), "CLIENT-001"
|
|
|
|
|
)
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
self.repository.get("admin.client_name"), "办公室电脑"
|
|
|
|
|
)
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
{record.updated_at for record in records},
|
|
|
|
|
{"2026-08-06T10:00:00Z"},
|
|
|
|
|
)
|
|
|
|
|
|
2026-08-06 16:21:39 +08:00
|
|
|
def test_empty_setting_key_is_rejected(self) -> None:
|
|
|
|
|
with self.assertRaisesRegex(ValueError, "setting_key"):
|
|
|
|
|
self.repository.set(" ", True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|