import pytest from scraper.realtime_trains import _fmt, _parse_services # --------------------------------------------------------------------------- # _fmt # --------------------------------------------------------------------------- def test_fmt_four_digits(): assert _fmt('0830') == '08:30' def test_fmt_already_colon(): assert _fmt('08:30') == '08:30' def test_fmt_strips_non_digits(): assert _fmt('08h30') == '08:30' # --------------------------------------------------------------------------- # _parse_services # --------------------------------------------------------------------------- def _make_html(services: list[tuple[str, str]], time_class: str) -> str: """Build a minimal servicelist HTML with (train_id, time) pairs.""" items = '' for tid, time in services: items += f'''
{tid}
{time}
''' return f'
{items}
' def test_parse_services_departures(): html = _make_html([('1A23', '0700'), ('2B45', '0830')], 'd') result = _parse_services(html, 'div.time.plan.d') assert result == {'1A23': '07:00', '2B45': '08:30'} def test_parse_services_arrivals(): html = _make_html([('1A23', '0845')], 'a') result = _parse_services(html, 'div.time.plan.a') assert result == {'1A23': '08:45'} def test_parse_services_no_servicelist(): assert _parse_services('', 'div.time.plan.d') == {} def test_parse_services_skips_missing_time(): html = '''
1A23
2B45
0900
''' result = _parse_services(html, 'div.time.plan.d') assert '1A23' not in result assert result == {'2B45': '09:00'} def test_parse_services_skips_empty_time(): html = '''
1A23
''' result = _parse_services(html, 'div.time.plan.d') assert result == {}