feat: login time window rules (EPIC_000014)
- Implemented RuleManager and JSON storage - Added background enforcement scheduler - Added Web UI for rule management at /ui/rules - Bumped version to 0.3.0
This commit is contained in:
56
tests/test_api_rules.py
Normal file
56
tests/test_api_rules.py
Normal file
@ -0,0 +1,56 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user