from __future__ import annotations import acquisition.classification.coarse as coarse import acquisition.classify as legacy_classify from core.config import PgConfig, Settings def _settings() -> Settings: return Settings( pg=PgConfig(host="h", port=5432, user="u", password="p", database="d"), aiddit_crawler_base_url="http://crawler.test", crawler_timeout=30, openrouter_timeout_seconds=90, openrouter_model="m", openrouter_base_url="http://openrouter.test", openrouter_api_key="k", llm_model="m", max_cards=12, frames_dir="f", douyin_ratio="540p", data_dir="data", ) def test_formal_classify_imgtext_passes_http_image_urls(monkeypatch): captured = {} def fake_judge(messages, settings, timeout): captured["messages"] = messages return 1, "ok", "先定受众", "" monkeypatch.setattr(coarse, "_judge", fake_judge) result = coarse.classify_imgtext( { "platform": "xiaohongshu", "title": "脚本创作", "body_text": "讲怎么设计开头", "images": ["https://cdn.test/a.jpg"], }, _settings(), ) assert result[0] == 1 user_content = captured["messages"][1]["content"] assert {"type": "image_url", "image_url": {"url": "https://cdn.test/a.jpg"}} in user_content def test_legacy_classify_imgtext_also_passes_http_image_urls(monkeypatch): captured = {} def fake_judge(messages, settings, timeout): captured["messages"] = messages return 1, "ok", "先定受众", "" monkeypatch.setattr(legacy_classify, "_judge", fake_judge) result = legacy_classify.classify_imgtext( { "platform": "weixin", "title": "公众号选题", "body_text": "讲怎么做标题", "images": ["https://cdn.test/w.jpg"], }, _settings(), ) assert result[0] == 1 user_content = captured["messages"][1]["content"] assert {"type": "image_url", "image_url": {"url": "https://cdn.test/w.jpg"}} in user_content def test_coarse_classify_item_maps_judge_result(monkeypatch): monkeypatch.setattr( coarse, "classify_imgtext", lambda payload, settings: (0, "不是创作知识", "", ""), ) result = coarse.coarse_classify_item( platform="weixin", title="普通知识", body_text="只是作品介绍", image_urls=["https://cdn.test/a.jpg"], settings=_settings(), ) assert result.is_creation_knowledge is False assert result.label == "not_creation" assert result.status == "classified"