def test_results(mocker, capsys): ep = mocker.Mock() ep.name = "testuser" worker = ep.load.return_value = fake_entry_point # worker = ep.load.return_value = lambda year, day, data: ("answer1", "wrong") # TODO: why doesn't that work? mocker.patch("pkg_resources.iter_entry_points", return_value=iter([ep])) fake_puzzle = mocker.MagicMock() fake_puzzle.year = 2015 fake_puzzle.day = 1 fake_puzzle.input_data = "testinput" fake_puzzle.answer_a = "answer1" fake_puzzle.answer_b = "answer2" fake_puzzle.title = "The Puzzle Title" mocker.patch("aocd.runner.Puzzle", return_value=fake_puzzle) run_for( plugins=["testuser"], years=[2015], days=[1], datasets={"testdataset": "testtoken"}, ) ep.load.assert_called_once_with() out, err = capsys.readouterr() txt = "2015/1 - The Puzzle Title testuser/testdataset" assert txt in out assert "part a: answer1 " in out assert "part b: wrong (expected: answer2)" in out assert "✔" in out
def test_run_and_autosubmit(aocd_dir, mocker, capsys, requests_mock): title_path = aocd_dir / "titles" title_path.mkdir() title_file = title_path / "2015_01.txt" title_file.write_text("The Puzzle Title") input_path = aocd_dir / "thetesttoken" / "2015_01_input.txt" input_path.write_text("testinput") answer_path = aocd_dir / "thetesttoken" / "2015_01a_answer.txt" answer_path.write_text("answer1") requests_mock.get(url="https://adventofcode.com/2015/day/1") requests_mock.post( url="https://adventofcode.com/2015/day/1/answer", text="<article>That's not the right answer</article>", ) ep = mocker.Mock() ep.name = "testuser" ep.load.return_value = fake_entry_point mocker.patch("pkg_resources.iter_entry_points", return_value=iter([ep])) run_for( plugins=["testuser"], years=[2015], days=[1], datasets={"default": "thetesttoken"}, ) out, err = capsys.readouterr() assert "part a: answer1 " in out assert "part b: wrong (correct answer unknown)" in out
def test_results_xmas(mocker, capsys): ep = mocker.Mock() ep.name = "testuser" ep.load.return_value = xmas_entry_point mocker.patch("pkg_resources.iter_entry_points", return_value=iter([ep])) fake_puzzle = mocker.MagicMock( year=2015, day=25, input_data="testinput", answer_a="answer1", answer_b="not_used", title="The Puzzle Title", ) mocker.patch("aocd.runner.Puzzle", return_value=fake_puzzle) run_for( plugins=["testuser"], years=[2015], days=[25], datasets={"testdataset": "testtoken"}, ) ep.load.assert_called_once_with() out, err = capsys.readouterr() txt = "2015/25 - The Puzzle Title testuser/testdataset" assert txt in out assert "part a: answer1 " in out assert "part b" not in out assert "✔" in out
def test_day_out_of_range(mocker, capsys, freezer): freezer.move_to("2018-12-01 12:00:00Z") ep = mocker.Mock() ep.name = "testuser" ep.load.return_value = fake_entry_point mocker.patch("pkg_resources.iter_entry_points", return_value=iter([ep])) run_for( plugins=["testuser"], years=[2018], days=[27], datasets={"default": "thetesttoken"}, ) out, err = capsys.readouterr() assert out == err == ""
def test_run_error(aocd_dir, mocker, capsys): title_path = aocd_dir / "titles" title_path.mkdir() title_file = title_path / "2018_25.txt" title_file.write_text("The Puzzle Title") input_path = aocd_dir / "thetesttoken" / "2018_25_input.txt" input_path.write_text("someinput") answer_path = aocd_dir / "thetesttoken" / "2018_25a_answer.txt" answer_path.write_text("answ") ep = mocker.Mock() ep.name = "testuser" ep.load.return_value = bugged_entry_point mocker.patch("pkg_resources.iter_entry_points", return_value=iter([ep])) run_for( plugins=["testuser"], years=[2018], days=[25], datasets={"default": "thetesttoken"}, ) out, err = capsys.readouterr() txt = "Exception(123, 456)" assert "✖" in out assert txt in out assert "part b" not in out # because it's 25 dec, no part b puzzle
def test_nothing_to_do(): run_for(plugins=[], years=[], days=[], datasets=[])