fix: redirect to /setup/unresolved after series scan completes

- Add 'system_progress' event type to loading page redirect condition
- Add checkUnresolvedAndRedirect() for phase=initial to handle race condition
  where backend initialization completes before WebSocket connects
- Backend now emits series_sync progress events during initial setup
- Loading page checks /api/setup/unresolved immediately on load for phase=initial
- Fixes users getting stuck on loading page after setup
This commit is contained in:
2026-07-15 22:06:40 +02:00
parent 47bd393a57
commit d99636e9c7
5 changed files with 104 additions and 41 deletions

View File

@@ -771,13 +771,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=1
new_callable=AsyncMock, return_value=(1, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 1
assert result == (1, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -798,13 +798,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=1
new_callable=AsyncMock, return_value=(1, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 1
assert result == (1, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -825,13 +825,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=1
new_callable=AsyncMock, return_value=(1, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 1
assert result == (1, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -852,13 +852,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=1
new_callable=AsyncMock, return_value=(1, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 1
assert result == (1, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -879,13 +879,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=1
new_callable=AsyncMock, return_value=(1, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 1
assert result == (1, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -906,13 +906,13 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=0
new_callable=AsyncMock, return_value=(0, 0)
) as mock_setup_run:
mock_settings.anime_directory = anime_dir
result = await _scan_folders_to_database()
assert result == 0
assert result == (0, 0)
mock_setup_run.assert_called_once()
@pytest.mark.asyncio
@@ -923,11 +923,11 @@ class TestScanFoldersToDatabase:
) as mock_settings, \
patch(
'src.server.services.initialization_service.SetupService.run',
new_callable=AsyncMock, return_value=0
new_callable=AsyncMock, return_value=(0, 0)
) as mock_setup_run:
mock_settings.anime_directory = None
result = await _scan_folders_to_database()
assert result == 0
assert result == (0, 0)
mock_setup_run.assert_not_called()