Files
cmautobuy/client/test/test_settings_repository.py
T

79 lines
2.6 KiB
Python
Raw Normal View History

"""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"},
)
def test_empty_setting_key_is_rejected(self) -> None:
with self.assertRaisesRegex(ValueError, "setting_key"):
self.repository.set(" ", True)
if __name__ == "__main__":
unittest.main()