"""여행 일정 프롬프트 — 무엇을 반드시 물어야 하는가.""" import pytest from services.prompts import itinerary as prompts def test_durations_are_two_render_contract_strings(): """검증: 기간 문자열.""" assert prompts.DURATIONS == ("1박 2일", "2박 3일") def test_prompt_carries_place_region_and_duration(): """검증: 변수 세 개가 프롬프트에 들어간다.""" text = prompts.build_prompt("스테이,머뭄", "전북특별자치도 군산시", "1박 2일") assert "스테이,머뭄" in text assert "전북특별자치도 군산시" in text assert '"1박 2일"' in text # 스키마의 duration 고정값 assert "1박 2일 여행 일정" in text # 해야 할 일 def test_prompt_fixes_five_concepts(): """검증: 컨셉 5개가 프롬프트에 박혀 있다.""" text = prompts.build_prompt("업소", "지역", "2박 3일") for concept in ("역사·근대건축", "자연 풍경", "미식", "아이와 함께", "야외활동"): assert concept in text def test_prompt_asks_for_ten_courses_total(): """검증: 컨셉당 2개씩 총 10개를 요청한다.""" text = prompts.build_prompt("업소", "지역", "1박 2일") assert "5개 컨셉마다 2개씩, 총 10개" in text assert "같은 컨셉 안의 두 코스도 서로 다른 일정이어야 한다" in text def test_prompt_forbids_the_lodging_itself_as_a_stop(): """검증: 업소를 정거장에 넣지 말라는 규칙.""" text = prompts.build_prompt("업소", "지역", "1박 2일") assert "[업소] 자신은 정거장에 넣지 않는다" in text def test_prompt_requires_coordinates_and_forbids_fences(): """검증: 좌표는 항상 요구하고, 코드펜스는 금지한다.""" text = prompts.build_prompt("업소", "지역", "1박 2일") assert "모든 정거장에 latitude·longitude 를 적는다" in text assert "코드펜스를 붙이지 않는다" in text def test_prompt_forbids_identical_courses(): """검증: 같은 정거장 집합 금지 규칙.""" text = prompts.build_prompt("업소", "지역", "2박 3일") assert "같은 정거장 집합" in text def test_unknown_duration_is_rejected(): """검증: 모르는 기간.""" with pytest.raises(ValueError): prompts.build_prompt("업소", "지역", "3박 4일")