StoreItem and choose_upgrade, get_store_items, buy_upgrade, get_cps, run_bot with a Clock port, main and python -m cookie_clicker_bot. 74 offline tests. Reviewed in RC-012. Task: MIL-003#1 Task: MIL-003#2 Task: MIL-003#3 Task: MIL-003#4 Task: MIL-003#5 Task: MIL-003#6 Closes #13 Closes #14 Closes #15 Closes #16 Closes #17 Closes #18
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""@file
|
|
@brief Tests of the purchase strategy choose_upgrade.
|
|
"""
|
|
|
|
import dataclasses
|
|
|
|
import pytest
|
|
|
|
from cookie_clicker_bot.domain.store_item import StoreItem, choose_upgrade
|
|
|
|
|
|
def test_choose_upgrade_picks_the_most_expensive_affordable_item() -> None:
|
|
items = [StoreItem(0, 15, True), StoreItem(1, 100, True), StoreItem(2, 1100, False)]
|
|
assert choose_upgrade(items) == StoreItem(1, 100, True)
|
|
|
|
|
|
def test_choose_upgrade_returns_none_when_nothing_is_affordable() -> None:
|
|
assert choose_upgrade([StoreItem(0, 15, False), StoreItem(1, 100, False)]) is None
|
|
|
|
|
|
def test_choose_upgrade_returns_none_for_an_empty_store() -> None:
|
|
assert choose_upgrade([]) is None
|
|
|
|
|
|
def test_choose_upgrade_returns_the_only_item_when_it_is_affordable() -> None:
|
|
item = StoreItem(0, 15, True)
|
|
assert choose_upgrade([item]) == item
|
|
|
|
|
|
def test_choose_upgrade_prefers_the_highest_index_on_equal_price() -> None:
|
|
items = [StoreItem(3, 50, True), StoreItem(7, 50, True), StoreItem(5, 50, True)]
|
|
assert choose_upgrade(items) == StoreItem(7, 50, True)
|
|
|
|
|
|
def test_choose_upgrade_trusts_the_affordable_flag_at_price_boundary() -> None:
|
|
items = [StoreItem(0, 15, True), StoreItem(1, 16, False)]
|
|
assert choose_upgrade(items) == StoreItem(0, 15, True)
|
|
|
|
|
|
def test_choose_upgrade_ignores_the_order_of_the_items() -> None:
|
|
items = [StoreItem(2, 500, True), StoreItem(0, 15, True), StoreItem(1, 100, True)]
|
|
assert choose_upgrade(items) == StoreItem(2, 500, True)
|
|
|
|
|
|
def test_store_item_is_immutable() -> None:
|
|
item = StoreItem(0, 15, True)
|
|
with pytest.raises(dataclasses.FrozenInstanceError):
|
|
item.price = 1 # type: ignore[misc]
|