feat: 定义任务模型与 SQLite Repository (#8)
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user