goofish / tests /integration /test_cli_spider.py
host1syan's picture
Upload 212 files
5378afe verified
import asyncio
import importlib
import json
import sys
import types
def test_cli_runs_single_task_with_prompt(tmp_path, load_json_fixture, monkeypatch):
fake_scraper = types.ModuleType("src.scraper")
async def placeholder_scrape(task_config, debug_limit):
return 0
fake_scraper.scrape_xianyu = placeholder_scrape
monkeypatch.setitem(sys.modules, "src.scraper", fake_scraper)
sys.modules.pop("spider_v2", None)
spider_v2 = importlib.import_module("spider_v2")
config_data = load_json_fixture("config.sample.json")
base_prompt = "Base prompt. " + ("x" * 120) + " {{CRITERIA_SECTION}}"
criteria_prompt = "Criteria text for A7M4."
base_path = tmp_path / "base_prompt.txt"
criteria_path = tmp_path / "criteria_prompt.txt"
base_path.write_text(base_prompt, encoding="utf-8")
criteria_path.write_text(criteria_prompt, encoding="utf-8")
config_data[0]["ai_prompt_base_file"] = str(base_path)
config_data[0]["ai_prompt_criteria_file"] = str(criteria_path)
config_data[1]["ai_prompt_base_file"] = str(base_path)
config_data[1]["ai_prompt_criteria_file"] = str(criteria_path)
config_path = tmp_path / "config.json"
config_path.write_text(json.dumps(config_data, ensure_ascii=False), encoding="utf-8")
state_path = tmp_path / "state.json"
state_path.write_text("{}", encoding="utf-8")
monkeypatch.setattr(spider_v2, "STATE_FILE", str(state_path))
called = []
async def fake_scrape_xianyu(task_config, debug_limit):
called.append(task_config["task_name"])
assert "{{CRITERIA_SECTION}}" not in task_config["ai_prompt_text"]
assert "Criteria text for A7M4." in task_config["ai_prompt_text"]
return 1
monkeypatch.setattr(spider_v2, "scrape_xianyu", fake_scrape_xianyu)
monkeypatch.setattr(sys, "argv", ["spider_v2.py", "--config", str(config_path), "--task-name", "Sony A7M4"])
asyncio.run(spider_v2.main())
assert called == ["Sony A7M4"]