"""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_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()