better db model
This commit is contained in:
@@ -14,9 +14,7 @@ from sqlalchemy.orm import Session, sessionmaker
|
||||
from src.server.database.base import Base, SoftDeleteMixin, TimestampMixin
|
||||
from src.server.database.models import (
|
||||
AnimeSeries,
|
||||
DownloadPriority,
|
||||
DownloadQueueItem,
|
||||
DownloadStatus,
|
||||
Episode,
|
||||
UserSession,
|
||||
)
|
||||
@@ -49,11 +47,6 @@ class TestAnimeSeries:
|
||||
name="Attack on Titan",
|
||||
site="https://aniworld.to",
|
||||
folder="/anime/attack-on-titan",
|
||||
description="Epic anime about titans",
|
||||
status="completed",
|
||||
total_episodes=75,
|
||||
cover_url="https://example.com/cover.jpg",
|
||||
episode_dict={1: [1, 2, 3], 2: [1, 2, 3, 4]},
|
||||
)
|
||||
|
||||
db_session.add(series)
|
||||
@@ -172,9 +165,7 @@ class TestEpisode:
|
||||
episode_number=5,
|
||||
title="The Fifth Episode",
|
||||
file_path="/anime/test/S01E05.mp4",
|
||||
file_size=524288000, # 500 MB
|
||||
is_downloaded=True,
|
||||
download_date=datetime.now(timezone.utc),
|
||||
)
|
||||
|
||||
db_session.add(episode)
|
||||
@@ -225,17 +216,17 @@ class TestDownloadQueueItem:
|
||||
db_session.add(series)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
episode = Episode(
|
||||
series_id=series.id,
|
||||
season=1,
|
||||
episode_number=3,
|
||||
status=DownloadStatus.DOWNLOADING,
|
||||
priority=DownloadPriority.HIGH,
|
||||
progress_percent=45.5,
|
||||
downloaded_bytes=250000000,
|
||||
total_bytes=550000000,
|
||||
download_speed=2500000.0,
|
||||
retry_count=0,
|
||||
)
|
||||
db_session.add(episode)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
series_id=series.id,
|
||||
episode_id=episode.id,
|
||||
download_url="https://example.com/download/ep3",
|
||||
file_destination="/anime/download/S01E03.mp4",
|
||||
)
|
||||
@@ -245,37 +236,38 @@ class TestDownloadQueueItem:
|
||||
|
||||
# Verify saved
|
||||
assert item.id is not None
|
||||
assert item.status == DownloadStatus.DOWNLOADING
|
||||
assert item.priority == DownloadPriority.HIGH
|
||||
assert item.progress_percent == 45.5
|
||||
assert item.retry_count == 0
|
||||
assert item.episode_id == episode.id
|
||||
assert item.series_id == series.id
|
||||
|
||||
def test_download_item_status_enum(self, db_session: Session):
|
||||
"""Test download status enum values."""
|
||||
def test_download_item_episode_relationship(self, db_session: Session):
|
||||
"""Test download item episode relationship."""
|
||||
series = AnimeSeries(
|
||||
key="status-test",
|
||||
name="Status Test",
|
||||
key="relationship-test",
|
||||
name="Relationship Test",
|
||||
site="https://example.com",
|
||||
folder="/anime/status",
|
||||
folder="/anime/relationship",
|
||||
)
|
||||
db_session.add(series)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
episode = Episode(
|
||||
series_id=series.id,
|
||||
season=1,
|
||||
episode_number=1,
|
||||
status=DownloadStatus.PENDING,
|
||||
)
|
||||
db_session.add(episode)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
series_id=series.id,
|
||||
episode_id=episode.id,
|
||||
)
|
||||
db_session.add(item)
|
||||
db_session.commit()
|
||||
|
||||
# Update status
|
||||
item.status = DownloadStatus.COMPLETED
|
||||
db_session.commit()
|
||||
|
||||
# Verify status change
|
||||
assert item.status == DownloadStatus.COMPLETED
|
||||
# Verify relationship
|
||||
assert item.episode.id == episode.id
|
||||
assert item.series.id == series.id
|
||||
|
||||
def test_download_item_error_handling(self, db_session: Session):
|
||||
"""Test download item with error information."""
|
||||
@@ -288,21 +280,24 @@ class TestDownloadQueueItem:
|
||||
db_session.add(series)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
episode = Episode(
|
||||
series_id=series.id,
|
||||
season=1,
|
||||
episode_number=1,
|
||||
status=DownloadStatus.FAILED,
|
||||
)
|
||||
db_session.add(episode)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
series_id=series.id,
|
||||
episode_id=episode.id,
|
||||
error_message="Network timeout after 30 seconds",
|
||||
retry_count=2,
|
||||
)
|
||||
db_session.add(item)
|
||||
db_session.commit()
|
||||
|
||||
# Verify error info
|
||||
assert item.status == DownloadStatus.FAILED
|
||||
assert item.error_message == "Network timeout after 30 seconds"
|
||||
assert item.retry_count == 2
|
||||
|
||||
|
||||
class TestUserSession:
|
||||
@@ -502,32 +497,31 @@ class TestDatabaseQueries:
|
||||
db_session.add(series)
|
||||
db_session.commit()
|
||||
|
||||
# Create items with different statuses
|
||||
for i, status in enumerate([
|
||||
DownloadStatus.PENDING,
|
||||
DownloadStatus.DOWNLOADING,
|
||||
DownloadStatus.COMPLETED,
|
||||
]):
|
||||
item = DownloadQueueItem(
|
||||
# Create episodes and items
|
||||
for i in range(3):
|
||||
episode = Episode(
|
||||
series_id=series.id,
|
||||
season=1,
|
||||
episode_number=i + 1,
|
||||
status=status,
|
||||
)
|
||||
db_session.add(episode)
|
||||
db_session.commit()
|
||||
|
||||
item = DownloadQueueItem(
|
||||
series_id=series.id,
|
||||
episode_id=episode.id,
|
||||
)
|
||||
db_session.add(item)
|
||||
db_session.commit()
|
||||
|
||||
# Query pending items
|
||||
# Query all items
|
||||
result = db_session.execute(
|
||||
select(DownloadQueueItem).where(
|
||||
DownloadQueueItem.status == DownloadStatus.PENDING
|
||||
)
|
||||
select(DownloadQueueItem)
|
||||
)
|
||||
pending = result.scalars().all()
|
||||
items = result.scalars().all()
|
||||
|
||||
# Verify query
|
||||
assert len(pending) == 1
|
||||
assert pending[0].episode_number == 1
|
||||
assert len(items) == 3
|
||||
|
||||
def test_query_active_sessions(self, db_session: Session):
|
||||
"""Test querying active user sessions."""
|
||||
|
||||
Reference in New Issue
Block a user