import unittest import os import sys import tempfile from unittest.mock import MagicMock # Mock pam module before importing backend components sys.modules["pam"] = MagicMock() from backend.settings import Settings from backend.models import AccessRule, TimeWindow, DayOfWeek # Import endpoint functions directly from backend.app import get_rules, set_rule, delete_rule class TestRulesDirect(unittest.TestCase): def setUp(self): self.tmp_fd, self.rules_file = tempfile.mkstemp() os.close(self.tmp_fd) self.settings = Settings() self.settings.rules_file = self.rules_file def tearDown(self): if os.path.exists(self.rules_file): os.remove(self.rules_file) def test_crud_rules_direct(self): # 1. Get empty rules rules = get_rules(settings=self.settings) self.assertEqual(rules.rules, {}) # 2. Create rule rule = AccessRule( user="kid", enabled=True, allowed_windows=[ TimeWindow(days=[DayOfWeek.MONDAY], start_time="14:00", end_time="16:00") ] ) set_rule(rule, settings=self.settings) # 3. Verify created rules = get_rules(settings=self.settings) self.assertIn("kid", rules.rules) self.assertEqual(rules.rules["kid"].allowed_windows[0].start_time, "14:00") # 4. Delete rule delete_rule("kid", settings=self.settings) # 5. Verify deleted rules = get_rules(settings=self.settings) self.assertNotIn("kid", rules.rules) if __name__ == "__main__": unittest.main()