better db model
This commit is contained in:
@@ -174,10 +174,16 @@ class TestSerieScannerAsyncScan:
|
||||
"""Test scan_async updates existing series in database."""
|
||||
scanner = SerieScanner(temp_directory, mock_loader)
|
||||
|
||||
# Mock existing series in database
|
||||
# Mock existing series in database with different episodes
|
||||
existing = MagicMock()
|
||||
existing.id = 1
|
||||
existing.episode_dict = {1: [5, 6]} # Different from sample_serie
|
||||
existing.folder = sample_serie.folder
|
||||
|
||||
# Mock episodes (different from sample_serie)
|
||||
mock_existing_episodes = [
|
||||
MagicMock(season=1, episode_number=5),
|
||||
MagicMock(season=1, episode_number=6),
|
||||
]
|
||||
|
||||
with patch.object(scanner, 'get_total_to_scan', return_value=1):
|
||||
with patch.object(
|
||||
@@ -200,17 +206,24 @@ class TestSerieScannerAsyncScan:
|
||||
with patch(
|
||||
'src.server.database.service.AnimeSeriesService'
|
||||
) as mock_service:
|
||||
mock_service.get_by_key = AsyncMock(
|
||||
return_value=existing
|
||||
)
|
||||
mock_service.update = AsyncMock(
|
||||
return_value=existing
|
||||
)
|
||||
|
||||
await scanner.scan_async(mock_db_session)
|
||||
|
||||
# Verify database update was called
|
||||
mock_service.update.assert_called_once()
|
||||
with patch(
|
||||
'src.server.database.service.EpisodeService'
|
||||
) as mock_ep_service:
|
||||
mock_service.get_by_key = AsyncMock(
|
||||
return_value=existing
|
||||
)
|
||||
mock_service.update = AsyncMock(
|
||||
return_value=existing
|
||||
)
|
||||
mock_ep_service.get_by_series = AsyncMock(
|
||||
return_value=mock_existing_episodes
|
||||
)
|
||||
mock_ep_service.create = AsyncMock()
|
||||
|
||||
await scanner.scan_async(mock_db_session)
|
||||
|
||||
# Verify episodes were created
|
||||
assert mock_ep_service.create.called
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_scan_async_handles_errors_gracefully(
|
||||
@@ -249,17 +262,21 @@ class TestSerieScannerDatabaseHelpers:
|
||||
with patch(
|
||||
'src.server.database.service.AnimeSeriesService'
|
||||
) as mock_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=None)
|
||||
mock_created = MagicMock()
|
||||
mock_created.id = 1
|
||||
mock_service.create = AsyncMock(return_value=mock_created)
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is mock_created
|
||||
mock_service.create.assert_called_once()
|
||||
with patch(
|
||||
'src.server.database.service.EpisodeService'
|
||||
) as mock_ep_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=None)
|
||||
mock_created = MagicMock()
|
||||
mock_created.id = 1
|
||||
mock_service.create = AsyncMock(return_value=mock_created)
|
||||
mock_ep_service.create = AsyncMock()
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is mock_created
|
||||
mock_service.create.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_save_serie_to_db_updates_existing(
|
||||
@@ -270,20 +287,34 @@ class TestSerieScannerDatabaseHelpers:
|
||||
|
||||
existing = MagicMock()
|
||||
existing.id = 1
|
||||
existing.episode_dict = {1: [5, 6]} # Different episodes
|
||||
existing.folder = sample_serie.folder
|
||||
|
||||
# Mock existing episodes (different from sample_serie)
|
||||
mock_existing_episodes = [
|
||||
MagicMock(season=1, episode_number=5),
|
||||
MagicMock(season=1, episode_number=6),
|
||||
]
|
||||
|
||||
with patch(
|
||||
'src.server.database.service.AnimeSeriesService'
|
||||
) as mock_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
mock_service.update = AsyncMock(return_value=existing)
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is existing
|
||||
mock_service.update.assert_called_once()
|
||||
with patch(
|
||||
'src.server.database.service.EpisodeService'
|
||||
) as mock_ep_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
mock_service.update = AsyncMock(return_value=existing)
|
||||
mock_ep_service.get_by_series = AsyncMock(
|
||||
return_value=mock_existing_episodes
|
||||
)
|
||||
mock_ep_service.create = AsyncMock()
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is existing
|
||||
# Should have created new episodes
|
||||
assert mock_ep_service.create.called
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_save_serie_to_db_skips_unchanged(
|
||||
@@ -294,19 +325,33 @@ class TestSerieScannerDatabaseHelpers:
|
||||
|
||||
existing = MagicMock()
|
||||
existing.id = 1
|
||||
existing.episode_dict = sample_serie.episodeDict # Same episodes
|
||||
existing.folder = sample_serie.folder
|
||||
|
||||
# Mock episodes matching sample_serie.episodeDict
|
||||
mock_existing_episodes = []
|
||||
for season, ep_nums in sample_serie.episodeDict.items():
|
||||
for ep_num in ep_nums:
|
||||
mock_existing_episodes.append(
|
||||
MagicMock(season=season, episode_number=ep_num)
|
||||
)
|
||||
|
||||
with patch(
|
||||
'src.server.database.service.AnimeSeriesService'
|
||||
) as mock_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is None
|
||||
mock_service.update.assert_not_called()
|
||||
with patch(
|
||||
'src.server.database.service.EpisodeService'
|
||||
) as mock_ep_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
mock_ep_service.get_by_series = AsyncMock(
|
||||
return_value=mock_existing_episodes
|
||||
)
|
||||
|
||||
result = await scanner._save_serie_to_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is None
|
||||
mock_service.update.assert_not_called()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_serie_in_db_updates_existing(
|
||||
@@ -321,15 +366,20 @@ class TestSerieScannerDatabaseHelpers:
|
||||
with patch(
|
||||
'src.server.database.service.AnimeSeriesService'
|
||||
) as mock_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
mock_service.update = AsyncMock(return_value=existing)
|
||||
|
||||
result = await scanner._update_serie_in_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is existing
|
||||
mock_service.update.assert_called_once()
|
||||
with patch(
|
||||
'src.server.database.service.EpisodeService'
|
||||
) as mock_ep_service:
|
||||
mock_service.get_by_key = AsyncMock(return_value=existing)
|
||||
mock_service.update = AsyncMock(return_value=existing)
|
||||
mock_ep_service.get_by_series = AsyncMock(return_value=[])
|
||||
mock_ep_service.create = AsyncMock()
|
||||
|
||||
result = await scanner._update_serie_in_db(
|
||||
sample_serie, mock_db_session
|
||||
)
|
||||
|
||||
assert result is existing
|
||||
mock_service.update.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_serie_in_db_returns_none_if_not_found(
|
||||
|
||||
Reference in New Issue
Block a user