refactor: restructure core→server, split large entity files into database module
- Move src/core/ → src/server/ - Split SerieList.py (531 lines) and series.py (414 lines) into src/server/database/ - Add database/models.py for SQLAlchemy models - Update all test imports to reflect new structure - Remove deprecated test files (test_serie_class.py, test_serie_folder_with_year.py)
This commit is contained in:
@@ -13,10 +13,22 @@ from unittest.mock import AsyncMock, MagicMock, Mock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from src.core.entities.series import Serie
|
||||
from src.server.database.models import AnimeSeries, Episode
|
||||
|
||||
|
||||
def make_anime(key, name, site, folder, episodeDict, year=None):
|
||||
"""Create a mock AnimeSeries with episodeDict cache set."""
|
||||
mock = MagicMock(spec=AnimeSeries)
|
||||
mock.key = key
|
||||
mock.name = name
|
||||
mock.site = site
|
||||
mock.folder = folder
|
||||
mock.year = year
|
||||
mock.episodeDict = episodeDict
|
||||
mock._episode_dict_cache = episodeDict
|
||||
return mock
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_series_app():
|
||||
"""Create a mock SeriesApp with scanner."""
|
||||
@@ -73,8 +85,8 @@ class TestAddSeriesWithEpisodes:
|
||||
|
||||
# Mock scan_single_series to update keyDict
|
||||
def mock_scan(key, folder):
|
||||
# Create Serie with episodes
|
||||
serie = Serie(
|
||||
# Create anime with episodes
|
||||
anime = make_anime(
|
||||
key=key,
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -83,7 +95,7 @@ class TestAddSeriesWithEpisodes:
|
||||
year=2024
|
||||
)
|
||||
# Update scanner's keyDict
|
||||
mock_series_app.serie_scanner.keyDict[key] = serie
|
||||
mock_series_app.serie_scanner.keyDict[key] = anime
|
||||
return {1: [1, 2, 3]}
|
||||
|
||||
mock_series_app.serie_scanner.scan_single_series = mock_scan
|
||||
@@ -106,8 +118,8 @@ class TestAddSeriesWithEpisodes:
|
||||
# Arrange
|
||||
key = "test-anime"
|
||||
|
||||
# Create Serie in scanner's keyDict with episodes
|
||||
serie = Serie(
|
||||
# Create anime in scanner's keyDict with episodes
|
||||
anime = make_anime(
|
||||
key=key,
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -115,7 +127,7 @@ class TestAddSeriesWithEpisodes:
|
||||
episodeDict={1: [1, 2, 3], 2: [1, 2]},
|
||||
year=2024
|
||||
)
|
||||
mock_series_app.serie_scanner.keyDict[key] = serie
|
||||
mock_series_app.serie_scanner.keyDict[key] = anime
|
||||
|
||||
# Mock the database save method
|
||||
with patch.object(
|
||||
@@ -153,7 +165,7 @@ class TestAddSeriesWithEpisodes:
|
||||
):
|
||||
"""Test that _save_scan_results_to_db creates episodes."""
|
||||
# Arrange
|
||||
serie = Serie(
|
||||
anime = make_anime(
|
||||
key="test-anime",
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -193,7 +205,7 @@ class TestAddSeriesWithEpisodes:
|
||||
mock_episode_service.create = AsyncMock(side_effect=track_episode_create)
|
||||
|
||||
# Act
|
||||
result = await mock_anime_service._save_scan_results_to_db([serie])
|
||||
result = await mock_anime_service._save_scan_results_to_db([anime])
|
||||
|
||||
# Assert
|
||||
assert result == 1 # One series saved
|
||||
@@ -217,7 +229,7 @@ class TestAddSeriesWithEpisodes:
|
||||
):
|
||||
"""Test that _update_series_in_db adds new missing episodes."""
|
||||
# Arrange
|
||||
serie = Serie(
|
||||
anime = make_anime(
|
||||
key="test-anime",
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -269,7 +281,7 @@ class TestAddSeriesWithEpisodes:
|
||||
mock_episode_service.delete = AsyncMock()
|
||||
|
||||
# Act
|
||||
result = await mock_anime_service._save_scan_results_to_db([serie])
|
||||
result = await mock_anime_service._save_scan_results_to_db([anime])
|
||||
|
||||
# Assert
|
||||
assert result == 1
|
||||
@@ -292,7 +304,7 @@ class TestAddSeriesWithEpisodes:
|
||||
|
||||
# Setup mock scanner to populate keyDict
|
||||
def mock_scan(key, folder):
|
||||
serie = Serie(
|
||||
anime = make_anime(
|
||||
key=key,
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -300,7 +312,7 @@ class TestAddSeriesWithEpisodes:
|
||||
episodeDict={1: [1, 2, 3]},
|
||||
year=2024
|
||||
)
|
||||
mock_series_app.serie_scanner.keyDict[key] = serie
|
||||
mock_series_app.serie_scanner.keyDict[key] = anime
|
||||
return {1: [1, 2, 3]}
|
||||
|
||||
mock_series_app.serie_scanner.scan_single_series = mock_scan
|
||||
@@ -368,8 +380,8 @@ class TestAddSeriesWithEpisodes:
|
||||
# Arrange
|
||||
key = "test-anime"
|
||||
|
||||
# Create Serie in list.keyDict with episodes
|
||||
serie = Serie(
|
||||
# Create anime in list.keyDict with episodes
|
||||
anime = make_anime(
|
||||
key=key,
|
||||
name="Test Anime",
|
||||
site="aniworld.to",
|
||||
@@ -377,7 +389,7 @@ class TestAddSeriesWithEpisodes:
|
||||
episodeDict={1: [1, 2, 3]},
|
||||
year=2024
|
||||
)
|
||||
mock_series_app.list.keyDict[key] = serie
|
||||
mock_series_app.list.keyDict[key] = anime
|
||||
|
||||
# Mock database AnimeSeries with NFO data
|
||||
mock_db_series = AnimeSeries(
|
||||
|
||||
Reference in New Issue
Block a user