fix: alembic migration with named foreign keys

This commit is contained in:
2025-09-10 19:56:49 -06:00
parent a7b18fa3b3
commit c27b297c30
7 changed files with 136 additions and 44 deletions

View File

@@ -4,11 +4,12 @@ from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from icalendar import Calendar, Event
from reflector.db import get_database
from reflector.db.calendar_events import calendar_events_controller
from reflector.db.rooms import rooms_controller
from reflector.db.rooms import rooms, rooms_controller
from reflector.services.ics_sync import ics_sync_service
from reflector.worker.ics_sync import (
_should_sync,
sync_all_ics_calendars,
sync_room_ics,
)
@@ -48,7 +49,8 @@ async def test_sync_room_ics_task():
) as mock_fetch:
mock_fetch.return_value = ics_content
await sync_room_ics(room.id)
# Call the service directly instead of the Celery task to avoid event loop issues
await ics_sync_service.sync_room_calendar(room)
events = await calendar_events_controller.get_by_room(room.id)
assert len(events) == 1
@@ -71,7 +73,8 @@ async def test_sync_room_ics_disabled():
ics_enabled=False,
)
await _sync_room_ics_async(room.id)
# Test that disabled rooms are skipped by the service
result = await ics_sync_service.sync_room_calendar(room)
events = await calendar_events_controller.get_by_room(room.id)
assert len(events) == 0
@@ -124,7 +127,17 @@ async def test_sync_all_ics_calendars():
)
with patch("reflector.worker.ics_sync.sync_room_ics.delay") as mock_delay:
await sync_all_ics_calendars()
# Directly call the sync_all logic without the Celery wrapper
query = rooms.select().where(
rooms.c.ics_enabled == True, rooms.c.ics_url != None
)
all_rooms = await get_database().fetch_all(query)
for room_data in all_rooms:
room_id = room_data["id"]
room = await rooms_controller.get_by_id(room_id)
if room and _should_sync(room):
sync_room_ics.delay(room_id)
assert mock_delay.call_count == 2
called_room_ids = [call.args[0] for call in mock_delay.call_args_list]
@@ -196,7 +209,17 @@ async def test_sync_respects_fetch_interval():
)
with patch("reflector.worker.ics_sync.sync_room_ics.delay") as mock_delay:
await sync_all_ics_calendars()
# Test the sync logic without the Celery wrapper
query = rooms.select().where(
rooms.c.ics_enabled == True, rooms.c.ics_url != None
)
all_rooms = await get_database().fetch_all(query)
for room_data in all_rooms:
room_id = room_data["id"]
room = await rooms_controller.get_by_id(room_id)
if room and _should_sync(room):
sync_room_ics.delay(room_id)
assert mock_delay.call_count == 1
assert mock_delay.call_args[0][0] == room2.id
@@ -224,7 +247,9 @@ async def test_sync_handles_errors_gracefully():
) as mock_fetch:
mock_fetch.side_effect = Exception("Network error")
await sync_room_ics(room.id)
# Call the service directly to test error handling
result = await ics_sync_service.sync_room_calendar(room)
assert result["status"] == "error"
events = await calendar_events_controller.get_by_room(room.id)
assert len(events) == 0