"""작가 단계 테스트 -- 크롤링 본문 + 링크 참조 글 생성.""" import json import pytest from unittest.mock import patch def test_generate_blog_post_includes_crawled_content(): """크롤링 본문이 프롬프트에 포함되는지 확인.""" from app.content_generator import generate_blog_post analysis = { "keyword": "무선 이어폰", "top_products": [{"title": "에어팟", "lprice": 200000, "mallName": "애플"}], "top_blogs": [ {"title": "에어팟 리뷰", "content": "에어팟을 한 달간 써봤는데 음질이 정말 좋았습니다."}, ], } mock_response = json.dumps({ "title": "무선 이어폰 추천", "body": "

본문

", "excerpt": "요약", "tags": ["이어폰"], }) with patch("app.content_generator._call_claude", return_value=mock_response) as mock_call, \ patch("app.content_generator.get_template", return_value=( "키워드: {keyword}\n참고 블로그:\n{reference_blogs}\n상품: {top_products}\n링크 상품: {brand_products}" )): result = generate_blog_post(analysis, "트렌드 브리프", brand_links=[]) prompt_used = mock_call.call_args[0][0] assert "에어팟을 한 달간 써봤는데" in prompt_used assert result["title"] == "무선 이어폰 추천" def test_generate_blog_post_includes_brand_links(): """브랜드커넥트 링크 정보가 프롬프트에 포함되는지 확인.""" from app.content_generator import generate_blog_post analysis = {"keyword": "무선 이어폰", "top_products": [], "top_blogs": []} brand_links = [ {"url": "https://link.coupang.com/abc", "product_name": "삼성 버즈3", "description": "노이즈캔슬링 지원", "placement_hint": "본문 중간"}, ] mock_response = json.dumps({ "title": "제목", "body": "

본문

", "excerpt": "요약", "tags": ["태그"], }) with patch("app.content_generator._call_claude", return_value=mock_response) as mock_call, \ patch("app.content_generator.get_template", return_value=( "키워드: {keyword}\n참고 블로그:\n{reference_blogs}\n상품: {top_products}\n링크 상품: {brand_products}" )): result = generate_blog_post(analysis, "트렌드 브리프", brand_links=brand_links) prompt_used = mock_call.call_args[0][0] assert "삼성 버즈3" in prompt_used assert "노이즈캔슬링 지원" in prompt_used def test_generate_blog_post_works_without_links(): """링크 없이도 정상 동작.""" from app.content_generator import generate_blog_post analysis = {"keyword": "테스트", "top_products": [], "top_blogs": []} mock_response = json.dumps({ "title": "제목", "body": "

본문

", "excerpt": "요약", "tags": ["태그"], }) with patch("app.content_generator._call_claude", return_value=mock_response), \ patch("app.content_generator.get_template", return_value=( "키워드: {keyword}\n참고 블로그:\n{reference_blogs}\n상품: {top_products}\n링크 상품: {brand_products}" )): result = generate_blog_post(analysis, "브리프") assert result["title"] == "제목" def test_parse_blog_json_fallback(): """JSON 파싱 실패 시 원본 텍스트를 body로 사용.""" from app.content_generator import _parse_blog_json result = _parse_blog_json("잘못된 JSON", "테스트 키워드") assert result["title"] == "테스트 키워드 추천 리뷰" assert result["body"] == "잘못된 JSON"