fix: support missing/no-episodes library filters (API, UI, docs, tests)

This commit is contained in:
2026-03-16 21:01:59 +01:00
parent e44a8190d0
commit 151a08e033
8 changed files with 227 additions and 99 deletions

View File

@@ -124,8 +124,8 @@ async def test_get_series_with_no_episodes_mixed_downloads(
async_session: AsyncSession
):
"""Test series with mixed downloaded/undownloaded episodes.
Series with ANY missing episodes (is_downloaded=False) should appear.
Series should NOT appear when there is at least one downloaded episode.
"""
# Create series with some downloaded and some undownloaded episodes
series = await AnimeSeriesService.create(
@@ -135,7 +135,7 @@ async def test_get_series_with_no_episodes_mixed_downloads(
folder="Test Series Mixed (2024)",
site="https://example.com/testmixed",
)
# Add downloaded episode
await EpisodeService.create(
async_session,
@@ -144,7 +144,7 @@ async def test_get_series_with_no_episodes_mixed_downloads(
episode_number=1,
is_downloaded=True,
)
# Add undownloaded episode (MISSING)
await EpisodeService.create(
async_session,
@@ -153,15 +153,56 @@ async def test_get_series_with_no_episodes_mixed_downloads(
episode_number=2,
is_downloaded=False,
)
await async_session.commit()
# Query for series with no episodes in folder
result = await AnimeSeriesService.get_series_with_no_episodes(
async_session
)
# Should return the series because it has missing episodes
# Should not return the series because it has at least one downloaded episode
assert len(result) == 0
@pytest.mark.asyncio
async def test_get_series_with_missing_episodes_mixed_downloads(
async_session: AsyncSession
):
"""Test missing episodes filter includes series with mixed downloads."""
series = await AnimeSeriesService.create(
async_session,
key="test-series-mixed",
name="Test Series Mixed",
folder="Test Series Mixed (2024)",
site="https://example.com/testmixed",
)
# Add downloaded episode
await EpisodeService.create(
async_session,
series_id=series.id,
season=1,
episode_number=1,
is_downloaded=True,
)
# Add undownloaded episode (MISSING)
await EpisodeService.create(
async_session,
series_id=series.id,
season=1,
episode_number=2,
is_downloaded=False,
)
await async_session.commit()
# Query for series with missing episodes
result = await AnimeSeriesService.get_series_with_missing_episodes(
async_session
)
assert len(result) == 1
assert result[0].id == series.id
@@ -171,8 +212,8 @@ async def test_get_series_with_no_episodes_mixed_seasons(
async_session: AsyncSession
):
"""Test series with some seasons downloaded, some not.
If ANY episode is still missing (is_downloaded=False), series should appear.
Series should not appear when any episode is downloaded.
"""
series = await AnimeSeriesService.create(
async_session,
@@ -181,7 +222,7 @@ async def test_get_series_with_no_episodes_mixed_seasons(
folder="Test Series (2024)",
site="https://example.com/test",
)
# Season 1: all episodes downloaded
await EpisodeService.create(
async_session,
@@ -190,7 +231,7 @@ async def test_get_series_with_no_episodes_mixed_seasons(
episode_number=1,
is_downloaded=True,
)
# Season 2: has missing episode
await EpisodeService.create(
async_session,
@@ -199,16 +240,15 @@ async def test_get_series_with_no_episodes_mixed_seasons(
episode_number=1,
is_downloaded=False,
)
await async_session.commit()
result = await AnimeSeriesService.get_series_with_no_episodes(
async_session
)
# Should return the series because season 2 has missing episodes
assert len(result) == 1
assert result[0].id == series.id
# Should not return the series because it has downloaded episodes
assert len(result) == 0
@pytest.mark.asyncio