# 쿠팡 파서 결정론적 단위 테스트(네트워크/브라우저 불필요). # fixture 는 실제 렌더된 검색결과에서 카드 4개를 추출한 것(단위가격 '1개당' 케이스 포함). from pathlib import Path from services.search.coupang.parser import parse_search_html FIXTURE = Path(__file__).parent / "fixtures" / "coupang_search.html" def test_parse_extracts_valid_products(): items = parse_search_html(FIXTURE.read_text()) assert len(items) >= 3 for p in items: assert p.source == "coupang" assert p.name and len(p.name) > 2 # 단위가격('1개당 44,400원')의 '1' 을 가격으로 오인하던 회귀 방지 assert p.price >= 100, f"이상 저가: {p.price} ({p.name})" assert p.detail_url and p.detail_url.startswith("https://www.coupang.com/vp/products/") assert p.external_id # vendorItemId(data-id) def test_parse_price_is_sale_not_unit_price(): # fixture 첫 카드의 판매가는 44,400원(단위가격도 '1개당 44,400원'이라 값은 같지만 # 파서가 정가(del)나 '%'가 아닌 판매가를 정확히 집는지 확인) items = parse_search_html(FIXTURE.read_text()) assert items[0].price == 44400