import pytest import datetime from app.services.door import checkAccess from app.model.models import Card, GroupDB, AccessAuthorizationDB, Timetable def test_check_access_with_valid_timetable(db_session): # Setup: create card with valid access group = GroupDB(name="Test Group") db_session.add(group) db_session.commit() card = Card(uuid="test-uuid-123", group_id=group.id) db_session.add(card) timetable = Timetable( weekday=datetime.datetime.weekday(datetime.date.today()), starttime=datetime.datetime.now().time(), duration=120 # 2 hours ) db_session.add(timetable) aa = AccessAuthorizationDB(name="Test AA", is_active=True) db_session.add(aa) aa.timetables = [timetable] group.accessauths = [aa] db_session.commit() # Test: access should be granted within time window result = checkAccess("test-uuid-123", db_session) assert result == True def test_check_access_outside_hours(db_session): # Test when current time is outside valid hours group = GroupDB(name="Test Group") db_session.add(group) db_session.commit() card = Card(uuid="test-uuid-123", group_id=group.id) db_session.add(card) timetable = Timetable( weekday=datetime.datetime.weekday(datetime.date.today()), starttime=datetime.time(1, 0), duration=1 # 2 hours ) db_session.add(timetable) aa = AccessAuthorizationDB(name="Test AA", is_active=True) db_session.add(aa) aa.timetables = [timetable] group.accessauths = [aa] db_session.commit() result = checkAccess("test-uuid-123", db_session) assert result == False def test_check_access_invalid_card(db_session): # Should raise exception for non-existent card with pytest.raises(Exception): checkAccess("non-existent-uuid", db_session)