"""리서치 단계 크롤링 통합 테스트.""" from unittest.mock import patch def test_analyze_keyword_with_crawling_enriches_top_blogs(): """analyze_keyword_with_crawling가 top_blogs에 content 필드를 추가.""" from app.naver_search import analyze_keyword_with_crawling mock_blog_result = { "total": 100, "items": [ {"title": "테스트 블로그", "link": "https://blog.naver.com/user1/111", "bloggername": "유저1", "description": "설명", "postdate": "20260401"}, ], } mock_shop_result = { "total": 50, "items": [{"title": "상품1", "lprice": 10000, "mallName": "쿠팡"}], "price_stats": {"min": 10000, "max": 10000, "avg": 10000, "count": 1}, } with patch("app.naver_search.search_blog", return_value=mock_blog_result), \ patch("app.naver_search.search_shopping", return_value=mock_shop_result), \ patch("app.naver_search._run_enrich", return_value=[ {"title": "테스트 블로그", "link": "https://blog.naver.com/user1/111", "bloggername": "유저1", "description": "설명", "postdate": "20260401", "content": "크롤링된 본문 내용"} ]): result = analyze_keyword_with_crawling("테스트 키워드") assert "content" in result["top_blogs"][0] assert result["top_blogs"][0]["content"] == "크롤링된 본문 내용" def test_analyze_keyword_with_crawling_fallback_on_enrich_failure(): """크롤링 실패 시 기존 데이터 유지.""" from app.naver_search import analyze_keyword_with_crawling mock_blog_result = { "total": 50, "items": [{"title": "블로그", "link": "https://blog.naver.com/u/1", "bloggername": "유저", "description": "설명"}], } mock_shop_result = {"total": 10, "items": [], "price_stats": None} with patch("app.naver_search.search_blog", return_value=mock_blog_result), \ patch("app.naver_search.search_shopping", return_value=mock_shop_result), \ patch("app.naver_search._run_enrich", side_effect=Exception("크롤링 실패")): # _run_enrich 내부에서 예외를 잡으므로 실제로는 이 테스트에서는 # _run_enrich 자체가 예외를 던지는 상황을 시뮬레이션 # 하지만 _run_enrich는 내부에서 잡으므로, 직접 fallback 테스트 pass # _run_enrich 자체 fallback 테스트 from app.naver_search import _run_enrich original_blogs = [{"title": "원본", "link": "https://blog.naver.com/u/1"}] with patch("app.web_crawler.enrich_top_blogs", side_effect=Exception("fail")): result = _run_enrich(original_blogs) assert result == original_blogs # fallback으로 원본 반환