"""스냅샷의 일정이 payload 로 그대로 나가는가.""" from services.site_payload import _local def _course(name: str, duration: str) -> dict: return { "name": name, "duration": duration, "audience": "누구에게나", "why": "이유.", "days": [{"label": "1일차", "startTime": "14:00", "stops": [{"name": "장소", "minutes": 60, "moveMinutes": 10, "searchQuery": "장소", "latitude": 35.99, "longitude": 126.71}]}], } def test_itineraries_pass_through_untouched(): """검증: 스냅샷에 일정이 있을 때.""" snapshot_local = { "region_code": "52군산시", "contents": [], "itineraries": [_course("코스A", "1박 2일"), _course("코스B", "2박 3일")], } local, _synced = _local(snapshot_local, 35.98642, 126.70612) assert [i["name"] for i in local["itineraries"]] == ["코스A", "코스B"] assert local["itineraries"][0]["days"][0]["stops"][0]["latitude"] == 35.99 def test_no_itineraries_key_when_empty(): """검증: 일정이 없을 때.""" local, _synced = _local({"region_code": "52군산시", "contents": [], "itineraries": []}, 35.98, 126.70) assert "itineraries" not in local def test_old_snapshot_without_the_key_does_not_break(): """검증: 이 기능 전에 구운 스냅샷(키가 아예 없다).""" local, _synced = _local({"region_code": "52군산시", "contents": []}, 35.98, 126.70) assert "itineraries" not in local def test_non_dict_entries_are_dropped(): """검증: body 에 dict 가 아닌 것이 섞였을 때.""" snapshot_local = {"contents": [], "itineraries": [_course("코스A", "1박 2일"), "깨진 값", None]} local, _synced = _local(snapshot_local, 35.98, 126.70) assert [i["name"] for i in local["itineraries"]] == ["코스A"] def test_distance_based_algorithm_is_not_used_anymore(): """검증: 좌표와 주변 관광지·맛집이 있어도 알고리즘 일정이 끼지 않는다.""" snapshot_local = { "contents": [ {"content_type": 3, "title": "관광지", "latitude": 35.99, "longitude": 126.71, "body": {"name": "관광지", "category": "관광지"}}, {"content_type": 4, "title": "맛집", "latitude": 35.98, "longitude": 126.70, "body": {"name": "맛집", "category": "맛집"}}, ], "itineraries": [], } local, _synced = _local(snapshot_local, 35.98642, 126.70612) assert "itineraries" not in local