FreeDATA/tests/test_config.py

76 lines
2.2 KiB
Python
Executable File

import os
import shutil
import tempfile
import unittest
from freedata_server import config
class DummyCtx:
def __init__(self):
pass
class TestConfigMethods(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Copy example ini to a temp file so we don't overwrite the source
base = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "freedata_server"))
example_path = os.path.join(base, "config.ini.example")
cls.temp_ini = tempfile.NamedTemporaryFile(delete=False, suffix=".ini").name
shutil.copy(example_path, cls.temp_ini)
cls.ctx = DummyCtx()
cls.config = config.CONFIG(cls.ctx, cls.temp_ini)
@classmethod
def tearDownClass(cls):
# Remove temp file
try:
os.remove(cls.temp_ini)
except OSError:
pass
def test_config_exists(self):
# Should find the copied temp file
self.assertTrue(self.config.config_exists())
def test_read(self):
data = self.config.read()
self.assertIsInstance(data, dict)
self.assertIn("STATION", data)
self.assertIn("AUDIO", data)
self.assertIn("RADIO", data)
def test_write(self):
data = self.config.read()
old_call = data["STATION"]["mycall"]
new_call = "T1CALL"
self.assertNotEqual(old_call, new_call)
# Update value and write
data["STATION"]["mycall"] = new_call
updated = self.config.write(data)
self.assertEqual(updated["STATION"]["mycall"], new_call)
# Confirm persisted
reloaded = self.config.read()
self.assertEqual(reloaded["STATION"]["mycall"], new_call)
# Restore original
reloaded["STATION"]["mycall"] = old_call
restored = self.config.write(reloaded)
self.assertEqual(restored["STATION"]["mycall"], old_call)
def test_validate_data(self):
# Invalid: ssid_list must be a list, not a string
with self.assertRaises(ValueError):
self.config.validate_data({"STATION": {"ssid_list": "abc"}})
# Valid case returns None
result = self.config.validate_data({"STATION": {"ssid_list": [1, 2, 3]}})
self.assertIsNone(result)
if __name__ == "__main__":
unittest.main()