"""Shared fixtures for processor tests""" import os import pytest from pathlib import Path from unittest.mock import AsyncMock, MagicMock, patch @pytest.fixture def mock_whisper_path(tmp_path): """Mock whisper.cpp path""" whisper_dir = tmp_path / "whisper.cpp" whisper_dir.mkdir() (whisper_dir / "whisper-cli").write_text("") models_dir = whisper_dir / "models" models_dir.mkdir() (models_dir / "ggml-base.bin").write_text("") return str(whisper_dir) @pytest.fixture def mock_bilibili_api(): """Mock B站 API 响应""" with patch("aiohttp.ClientSession.get") as mock_get: yield mock_get @pytest.fixture def sample_video(tmp_path): """创建测试视频文件""" video_path = tmp_path / "test_video.mp4" video_path.write_text("fake video content") return str(video_path) @pytest.fixture def sample_subtitle_response(): """B站字幕 API 响应示例""" return { "data": { "subtitle": { "list": [{ "lan": "ai-zh", "lan_doc": "中文(自动生成)", "subtitle_url": "//example.com/subtitle.json" }] } } } @pytest.fixture def sample_subtitle_content(): """字幕内容示例""" return { "body": [ {"from": 0.0, "to": 3.2, "content": "这是第一段字幕"}, {"from": 3.5, "to": 6.8, "content": "这是第二段字幕"}, ] } @pytest.fixture def sample_whisper_output(tmp_path): """Whisper 输出示例""" output_base = tmp_path / "test_video" return { "txt": str(output_base.with_suffix(".txt")), "srt": str(output_base.with_suffix(".srt")), "json": str(output_base.with_suffix(".json")), } @pytest.fixture def mock_state_manager(): """Mock WorkflowStateManager""" manager = MagicMock() manager.load.return_value = None manager.save = MagicMock() return manager @pytest.fixture def mock_settings(): """Mock KBSettings without HF_TOKEN""" settings = MagicMock() settings.hf_token.get_secret_value.return_value = "" return settings @pytest.fixture def mock_settings_with_hf_token(): """Mock KBSettings with HF_TOKEN""" settings = MagicMock() settings.hf_token.get_secret_value.return_value = "test_hf_token_123" return settings