"""Tests for the M9 systemd --user trigger-mode service manager.""" import unittest from unittest import mock from rigdoctor.core import service class UnitTextTests(unittest.TestCase): def test_unit_text_has_required_sections(self): txt = service.unit_text("RigDoctor recorder", ["record", "run"]) self.assertIn("[Unit]", txt) self.assertIn("[Service]", txt) self.assertIn("ExecStart=", txt) self.assertIn("record run", txt) self.assertIn("WantedBy=default.target", txt) class ApplyModeTests(unittest.TestCase): def test_unknown_mode_rejected(self): ok, msg = service.apply_mode("turbo") self.assertFalse(ok) self.assertIn("Unknown", msg) def test_no_systemd_saves_mode_but_reports(self): with mock.patch.object(service, "available", return_value=False), \ mock.patch.object(service.config, "update_config") as update: ok, msg = service.apply_mode("always-on") self.assertFalse(ok) self.assertIn("available", msg.lower()) update.assert_called_once_with(trigger_mode="always-on") def test_always_on_enables_recorder_disables_watch(self): calls = [] with mock.patch.object(service, "available", return_value=True), \ mock.patch.object(service, "install_units"), \ mock.patch.object(service, "_enable", side_effect=lambda n: calls.append(("enable", n)) or (0, "")), \ mock.patch.object(service, "_disable", side_effect=lambda n: calls.append(("disable", n)) or (0, "")), \ mock.patch.object(service.config, "update_config"): ok, _ = service.apply_mode("always-on") self.assertTrue(ok) self.assertIn(("enable", service.RECORDER_UNIT), calls) self.assertIn(("disable", service.WATCH_UNIT), calls) def test_manual_disables_both(self): disabled = [] with mock.patch.object(service, "available", return_value=True), \ mock.patch.object(service, "install_units"), \ mock.patch.object(service, "_enable", return_value=(0, "")), \ mock.patch.object(service, "_disable", side_effect=lambda n: disabled.append(n) or (0, "")), \ mock.patch.object(service.config, "update_config"): ok, _ = service.apply_mode("manual") self.assertTrue(ok) self.assertEqual(set(disabled), {service.RECORDER_UNIT, service.WATCH_UNIT}) if __name__ == "__main__": unittest.main()