This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-skills/tests/test_processors/test_download.py
T
starmen1265 9d5c3ffc48 test(04-02): add failing tests for DownloadInput/DownloadOutput schemas
TDD RED phase:
- Test DownloadInput validates required fields (content_dir, content_type)
- Test DownloadOutput validates required fields (metadata_file, content_file, title, author)
- Test DownloadOutput handles both video and article content types

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 23:17:54 +08:00

128 lines
4.7 KiB
Python

"""Tests for DownloadProcessor and DownloadInput/DownloadOutput schemas.
Test coverage:
- DownloadInput schema validation
- DownloadOutput schema validation
- DownloadProcessor metadata fetching
- DownloadProcessor content downloading
- DownloadProcessor state recording
"""
import pytest
from datetime import datetime
from unittest.mock import AsyncMock, MagicMock, patch
from pathlib import Path
from kb_pipeline.schemas import DownloadInput, DownloadOutput
class TestDownloadInputSchema:
"""Tests for DownloadInput schema validation."""
def test_schema_download_input_validates_required_fields(self):
"""Test 1: DownloadInput validates required fields"""
# Test with all required fields
input_data = DownloadInput(
content_id="BV1xx",
platform="bilibili",
content_dir="/tmp/content",
content_type="video"
)
assert input_data.content_id == "BV1xx"
assert input_data.platform == "bilibili"
assert input_data.content_dir == "/tmp/content"
assert input_data.content_type == "video"
def test_schema_download_input_requires_content_dir(self):
"""DownloadInput should require content_dir"""
with pytest.raises(Exception): # ValidationError from pydantic
DownloadInput(
content_id="BV1xx",
platform="bilibili",
content_type="video"
# Missing content_dir
)
def test_schema_download_input_requires_content_type(self):
"""DownloadInput should require content_type"""
with pytest.raises(Exception): # ValidationError from pydantic
DownloadInput(
content_id="BV1xx",
platform="bilibili",
content_dir="/tmp/content"
# Missing content_type
)
class TestDownloadOutputSchema:
"""Tests for DownloadOutput schema validation."""
def test_schema_download_output_validates_required_fields(self):
"""Test 2: DownloadOutput validates required fields"""
output = DownloadOutput(
success=True,
metadata_file="/tmp/content/bilibili_BV1xx_metadata.json",
content_file="/tmp/content/bilibili_BV1xx_content.md",
title="Test Video",
author="Test Author"
)
assert output.success is True
assert output.metadata_file == "/tmp/content/bilibili_BV1xx_metadata.json"
assert output.content_file == "/tmp/content/bilibili_BV1xx_content.md"
assert output.title == "Test Video"
assert output.author == "Test Author"
assert output.duration is None # Optional field
def test_schema_download_output_handles_video_content_type(self):
"""Test 3: DownloadOutput handles video content type with duration"""
output = DownloadOutput(
success=True,
metadata_file="/tmp/content/bilibili_BV1xx_metadata.json",
content_file="", # Video content handled by ASR
title="Test Video",
author="Test Author",
duration=300 # 5 minutes
)
assert output.success is True
assert output.duration == 300
assert output.content_file == ""
def test_schema_download_output_handles_article_content_type(self):
"""Test 3: DownloadOutput handles article content type without duration"""
output = DownloadOutput(
success=True,
metadata_file="/tmp/content/bilibili_CV123_metadata.json",
content_file="/tmp/content/bilibili_CV123_content.md",
title="Test Article",
author="Test Author",
duration=None # Articles don't have duration
)
assert output.success is True
assert output.duration is None
assert output.content_file == "/tmp/content/bilibili_CV123_content.md"
def test_schema_download_output_handles_zhihu_answer(self):
"""Test 3: DownloadOutput handles Zhihu answer content type"""
output = DownloadOutput(
success=True,
metadata_file="/tmp/content/zhihu_123456_metadata.json",
content_file="/tmp/content/zhihu_123456_content.md",
title="Test Answer",
author="Test Author"
)
assert output.success is True
assert "zhihu" in output.metadata_file
def test_schema_download_output_handles_failure(self):
"""DownloadOutput should handle failure case"""
output = DownloadOutput(
success=False,
error_message="Network error",
metadata_file="",
content_file="",
title="",
author=""
)
assert output.success is False
assert output.error_message == "Network error"