feat(server): add anime Pydantic models, unit tests, and infra notes
This commit is contained in:
109
tests/unit/test_anime_models.py
Normal file
109
tests/unit/test_anime_models.py
Normal file
@@ -0,0 +1,109 @@
|
||||
from pydantic import ValidationError
|
||||
|
||||
from src.server.models.anime import (
|
||||
AnimeSeriesResponse,
|
||||
EpisodeInfo,
|
||||
MissingEpisodeInfo,
|
||||
SearchRequest,
|
||||
SearchResult,
|
||||
)
|
||||
|
||||
|
||||
def test_episode_info_basic():
|
||||
ep = EpisodeInfo(episode_number=1, title="Pilot", duration_seconds=1500)
|
||||
assert ep.episode_number == 1
|
||||
assert ep.title == "Pilot"
|
||||
assert ep.duration_seconds == 1500
|
||||
assert ep.available is True
|
||||
|
||||
|
||||
def test_missing_episode_count():
|
||||
m = MissingEpisodeInfo(from_episode=5, to_episode=7)
|
||||
assert m.count == 3
|
||||
|
||||
|
||||
def test_anime_series_response():
|
||||
ep = EpisodeInfo(episode_number=1, title="Ep1")
|
||||
series = AnimeSeriesResponse(
|
||||
id="series-123",
|
||||
title="My Anime",
|
||||
episodes=[ep],
|
||||
total_episodes=12,
|
||||
)
|
||||
|
||||
assert series.id == "series-123"
|
||||
assert series.episodes[0].title == "Ep1"
|
||||
|
||||
|
||||
def test_search_request_validation():
|
||||
# valid
|
||||
req = SearchRequest(query="naruto", limit=5)
|
||||
assert req.query == "naruto"
|
||||
|
||||
# invalid: empty query
|
||||
try:
|
||||
SearchRequest(query="", limit=5)
|
||||
raised = False
|
||||
except ValidationError:
|
||||
raised = True
|
||||
assert raised
|
||||
|
||||
|
||||
def test_search_result_optional_fields():
|
||||
res = SearchResult(id="s1", title="T1", snippet="snip", score=0.9)
|
||||
assert res.score == 0.9
|
||||
|
||||
from pydantic import ValidationError
|
||||
|
||||
from src.server.models.anime import (
|
||||
AnimeSeriesResponse,
|
||||
EpisodeInfo,
|
||||
MissingEpisodeInfo,
|
||||
SearchRequest,
|
||||
SearchResult,
|
||||
)
|
||||
|
||||
|
||||
def test_episode_info_basic():
|
||||
ep = EpisodeInfo(episode_number=1, title="Pilot", duration_seconds=1500)
|
||||
assert ep.episode_number == 1
|
||||
assert ep.title == "Pilot"
|
||||
assert ep.duration_seconds == 1500
|
||||
assert ep.available is True
|
||||
|
||||
|
||||
def test_missing_episode_count():
|
||||
m = MissingEpisodeInfo(from_episode=5, to_episode=7)
|
||||
assert m.count == 3
|
||||
|
||||
|
||||
def test_anime_series_response():
|
||||
ep = EpisodeInfo(episode_number=1, title="Ep1")
|
||||
series = AnimeSeriesResponse(
|
||||
id="series-123",
|
||||
title="My Anime",
|
||||
episodes=[ep],
|
||||
total_episodes=12,
|
||||
)
|
||||
|
||||
assert series.id == "series-123"
|
||||
assert series.episodes[0].title == "Ep1"
|
||||
|
||||
|
||||
def test_search_request_validation():
|
||||
# valid
|
||||
req = SearchRequest(query="naruto", limit=5)
|
||||
assert req.query == "naruto"
|
||||
|
||||
# invalid: empty query
|
||||
try:
|
||||
SearchRequest(query="", limit=5)
|
||||
raised = False
|
||||
except ValidationError:
|
||||
raised = True
|
||||
assert raised
|
||||
|
||||
|
||||
def test_search_result_optional_fields():
|
||||
res = SearchResult(id="s1", title="T1", snippet="snip", score=0.9)
|
||||
assert res.score == 0.9
|
||||
Reference in New Issue
Block a user