from unittest.mock import Mock from scrapers.atcoder import scrape, scrape_contest_problems from scrapers.models import ProblemSummary def test_scrape_success(mocker, mock_atcoder_html): mock_response = Mock() mock_response.text = mock_atcoder_html mocker.patch("scrapers.atcoder.requests.get", return_value=mock_response) result = scrape("https://atcoder.jp/contests/abc350/tasks/abc350_a") assert len(result) == 1 assert result[0].input == "3\n1 2 3" assert result[0].expected == "6" def test_scrape_contest_problems(mocker): mock_response = Mock() mock_response.text = """
TaskName
A - Water Tank
B - Dentist Aoki
""" mocker.patch("scrapers.atcoder.requests.get", return_value=mock_response) result = scrape_contest_problems("abc350") assert len(result) == 2 assert result[0] == ProblemSummary(id="a", name="A - Water Tank") assert result[1] == ProblemSummary(id="b", name="B - Dentist Aoki") def test_scrape_network_error(mocker): mocker.patch( "scrapers.atcoder.requests.get", side_effect=Exception("Network error") ) result = scrape("https://atcoder.jp/contests/abc350/tasks/abc350_a") assert result == []