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
50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
"""@file
|
|
@brief Tests of parse_game_number.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from cookie_clicker_bot.domain.errors import UnreadableNumberError
|
|
from cookie_clicker_bot.domain.number_parsing import parse_game_number
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("text", "expected"),
|
|
[
|
|
("0", 0),
|
|
("1 cookie", 1),
|
|
("15 cookies", 15),
|
|
("12,345 cookies", 12345),
|
|
("1,234,567", 1234567),
|
|
],
|
|
)
|
|
def test_parse_plain_amounts(text: str, expected: int) -> None:
|
|
assert parse_game_number(text) == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("text", "expected"),
|
|
[
|
|
("1.234 million", 1_234_000),
|
|
("2 billion", 2_000_000_000),
|
|
("1.500 Thousand", 1500),
|
|
("3 decillion", 3 * 10**33),
|
|
],
|
|
)
|
|
def test_parse_amounts_with_number_word(text: str, expected: int) -> None:
|
|
assert parse_game_number(text) == expected
|
|
|
|
|
|
def test_parse_ignores_unknown_word_after_the_number() -> None:
|
|
assert parse_game_number("42 bakers") == 42
|
|
|
|
|
|
def test_parse_rounds_decimals() -> None:
|
|
assert parse_game_number("7.6 cookies") == 8
|
|
|
|
|
|
@pytest.mark.parametrize("text", ["", "cookies", "-5", "per second: 3"])
|
|
def test_parse_rejects_text_without_a_leading_number(text: str) -> None:
|
|
with pytest.raises(UnreadableNumberError):
|
|
parse_game_number(text)
|