Files

36 lines
1.7 KiB
Python

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)