import json import unittest from unittest import mock from scripts.ticket_availability import ( HEADERS_INTERPARK, HEADERS_YES24, INTERPARK_BASE, YES24_BASE, InterparkClient, Yes24Client, _fmt_date, _fmt_time, parse_url, ) class ParseUrlTest(unittest.TestCase): def test_yes24_full_url(self): self.assertEqual( parse_url("https://ticket.yes24.com/Perf/58026"), ("yes24", "58026"), ) def test_yes24_detail_view_url(self): self.assertEqual( parse_url("https://ticket.yes24.com/New/Perf/Detail/View/58026"), ("yes24", "58026"), ) def test_yes24_shorthand(self): self.assertEqual(parse_url("yes24:58026"), ("yes24", "58026")) def test_interpark_full_url(self): self.assertEqual( parse_url("https://tickets.interpark.com/goods/26000541"), ("interpark", "26000541"), ) def test_interpark_shorthand(self): self.assertEqual( parse_url("interpark:26000541"), ("interpark", "26000541") ) def test_bare_digits_requires_platform_prefix(self): with self.assertRaisesRegex(ValueError, "플랫폼"): parse_url("26000541") def test_unrecognized_url_raises(self): with self.assertRaisesRegex(ValueError, "인식할 수 없습니다"): parse_url("https://example.com/foo") class FormatHelpersTest(unittest.TestCase): def test_fmt_date_yyyymmdd(self): self.assertEqual(_fmt_date("20260513"), "2026-05-13") def test_fmt_date_passes_through_non_yyyymmdd(self): self.assertEqual(_fmt_date("2026-05-13"), "2026-05-13") self.assertEqual(_fmt_date(""), "") def test_fmt_time_hhmm(self): self.assertEqual(_fmt_time("1430"), "14:30") def test_fmt_time_passes_through_non_hhmm(self): self.assertEqual(_fmt_time("14:30"), "14:30") self.assertEqual(_fmt_time(""), "") class Yes24ClientTest(unittest.TestCase): def test_get_dates_normalizes_dashed_response_and_filters_past(self): client = Yes24Client.__new__(Yes24Client) client.http = mock.Mock() client.http.post.return_value = mock.Mock( text="2099-12-16,2099-12-17,", raise_for_status=lambda: None, ) dates = client._dates("58026", month_count=1) self.assertEqual(dates, ["20991216", "20991217"]) called_url = client.http.post.call_args.args[0] self.assertIn("axPerfDay.aspx", called_url) def test_get_dates_filters_dates_before_today(self): client = Yes24Client.__new__(Yes24Client) client.http = mock.Mock() client.http.post.return_value = mock.Mock( text="1999-01-01,2099-12-16,", raise_for_status=lambda: None, ) dates = client._dates("58026", month_count=1) self.assertEqual(dates, ["20991216"]) def test_get_seats_parses_remain_count(self): client = Yes24Client.__new__(Yes24Client) client.http = mock.Mock() client.http.post.return_value = mock.Mock( text='