fix: support missing/no-episodes library filters (API, UI, docs, tests)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user