Files
Tirsvad 68c439137f Implement bot core: open game, select language, click cookie, read count
Domain number parser, GamePort, the four lecture step functions, the
Selenium adapter and offline tests (fake game, fake driver). Reviewed in
RC-011.

Task: MIL-002#1
Task: MIL-002#2
Task: MIL-002#3
Task: MIL-002#4
Task: MIL-002#5
Closes #8
Closes #9
Closes #10
Closes #11
Closes #12
2026-10-28 16:33:33 +08:00

67 lines
1.8 KiB
Python

"""@file
@brief Tests of lecture steps 1 to 3 against a fake game.
"""
import pytest
from cookie_clicker_bot.application.use_cases.bot_core import (
click_cookie,
get_cookie_count,
open_game,
select_language,
)
from cookie_clicker_bot.constants import (
BIG_COOKIE_ID,
COOKIE_COUNTER_ID,
GAME_URL,
LANGUAGE_BUTTON_PREFIX,
LANGUAGE_CODE,
)
from tests.unit.fakes import FakeGame
LANGUAGE_BUTTON = LANGUAGE_BUTTON_PREFIX + LANGUAGE_CODE
def test_open_game_loads_the_url_and_waits_for_the_language_prompt() -> None:
game = FakeGame()
open_game(game)
assert game.opened == [GAME_URL]
assert game.waited == [LANGUAGE_BUTTON]
def test_select_language_clicks_the_button_and_waits_for_the_cookie() -> None:
game = FakeGame()
select_language(game)
assert game.clicked == [LANGUAGE_BUTTON]
assert game.waited == [BIG_COOKIE_ID]
@pytest.mark.parametrize("times", [0, 1, 2, 50])
def test_click_cookie_clicks_the_requested_number_of_times(times: int) -> None:
game = FakeGame()
click_cookie(game, times)
assert game.clicked == [BIG_COOKIE_ID] * times
def test_click_cookie_defaults_to_one_click() -> None:
game = FakeGame()
click_cookie(game)
assert game.clicked == [BIG_COOKIE_ID]
def test_click_cookie_refuses_a_negative_count() -> None:
game = FakeGame()
with pytest.raises(ValueError, match="negative"):
click_cookie(game, -1)
assert game.clicked == []
def test_get_cookie_count_reads_the_first_line_of_the_counter() -> None:
game = FakeGame({COOKIE_COUNTER_ID: "12,345 cookies\nper second: 3.5"})
assert get_cookie_count(game) == 12345
def test_get_cookie_count_reads_large_amounts_split_over_lines() -> None:
game = FakeGame({COOKIE_COUNTER_ID: "1.234 million\ncookies\nper second: 900"})
assert get_cookie_count(game) == 1_234_000