import importlib.util import sys import tempfile import unittest from pathlib import Path from unittest.mock import patch ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT / "app")) stem = "pigway_ubuntu_agent_api" if (ROOT / "app/pigway_ubuntu_agent_api.py").exists() else "pigway_pi_control_api" spec = importlib.util.spec_from_file_location("storage_api_under_test", ROOT / "app" / (stem + ".py")) api = importlib.util.module_from_spec(spec) spec.loader.exec_module(api) class StorageConfigTests(unittest.TestCase): def test_config_round_trip_and_invalid_edits_are_atomic(self): with tempfile.TemporaryDirectory() as directory: config = Path(directory) / "agent.conf" config.write_text("[device]\nname = auto\n") identifier = "a" * 32 with patch.object(api, "CFG", config): api.update_ini({"storage_names": {identifier: "媒体盘 100%"}, "storage_visible": {identifier: "false"}}) self.assertEqual(api.config_json()["storage_names"][identifier], "媒体盘 100%") self.assertEqual(api.config_json()["storage_visible"][identifier], "false") original = config.read_text() for updates in [ {"storage_visible": {identifier: "yes"}}, {"storage_names": {"invalid-id": "Bad"}}, {"storage_names": {identifier: "x" * 65}}, {"storage_names": {identifier: "bad\tname"}}, ]: with self.assertRaises(ValueError): api.update_ini(updates) self.assertEqual(config.read_text(), original)