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
67 lines
1.8 KiB
Python
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
|