One int holds all money. grant/take are the sole routing point — currency ids go to the purse, everything else to inventory. Money is never an inventory row. The 'coin' stand-in in the two unrelated inventory tests becomes worn_shortsword; they were never about money.
93 lines
2.3 KiB
GDScript
93 lines
2.3 KiB
GDScript
extends "res://addons/gut/test.gd"
|
|
|
|
const GameState = preload("res://scripts/state/game_state.gd")
|
|
|
|
|
|
func test_add_item_accumulates():
|
|
var s = GameState.new()
|
|
s.add_item("worn_shortsword", 3)
|
|
s.add_item("worn_shortsword", 2)
|
|
assert_eq(s.inventory["worn_shortsword"], 5)
|
|
|
|
|
|
func test_npc_disposition_clamps():
|
|
var s = GameState.new()
|
|
s.set_npc_disposition("oda_fenn", 250)
|
|
assert_eq(s.npc_dispositions["oda_fenn"], 100)
|
|
|
|
|
|
func test_drift_luck_respects_base():
|
|
var s = GameState.new()
|
|
s.luck_base = 10
|
|
s.luck = 10
|
|
s.drift_luck(100)
|
|
assert_eq(s.luck, 13)
|
|
|
|
|
|
func test_luck_descriptor_delegates():
|
|
var s = GameState.new()
|
|
s.luck = 4
|
|
assert_eq(s.luck_descriptor(), "Fortune spits on you")
|
|
|
|
|
|
func test_remove_item_decrements_and_floors_at_zero():
|
|
var gs = GameState.new()
|
|
gs.add_item("worn_shortsword", 3)
|
|
gs.remove_item("worn_shortsword", 2)
|
|
assert_eq(gs.inventory.get("worn_shortsword", 0), 1)
|
|
gs.remove_item("worn_shortsword", 5)
|
|
assert_eq(gs.inventory.get("worn_shortsword", 0), 0)
|
|
|
|
|
|
func test_revealed_topics_tracked():
|
|
var gs = GameState.new()
|
|
assert_false(gs.is_revealed("varrell_twins"))
|
|
gs.mark_revealed("varrell_twins")
|
|
assert_true(gs.is_revealed("varrell_twins"))
|
|
|
|
|
|
func test_gifts_given_tracked():
|
|
var gs = GameState.new()
|
|
assert_false(gs.is_gift_given("amulet"))
|
|
gs.mark_gift_given("amulet")
|
|
assert_true(gs.is_gift_given("amulet"))
|
|
|
|
|
|
func test_purse_starts_empty():
|
|
assert_eq(GameState.new().purse_copper, 0)
|
|
|
|
|
|
func test_grant_currency_lands_in_the_purse_not_the_inventory():
|
|
var gs = GameState.new()
|
|
gs.grant("silver", 2)
|
|
assert_eq(gs.purse_copper, 200)
|
|
assert_eq(gs.inventory.size(), 0, "money is never an inventory row")
|
|
|
|
|
|
func test_grant_non_currency_lands_in_the_inventory():
|
|
var gs = GameState.new()
|
|
gs.grant("worn_shortsword", 1)
|
|
assert_eq(gs.inventory.get("worn_shortsword", 0), 1)
|
|
assert_eq(gs.purse_copper, 0)
|
|
|
|
|
|
func test_take_currency_spends_from_the_purse():
|
|
var gs = GameState.new()
|
|
gs.grant("gold", 1)
|
|
gs.take("copper", 5)
|
|
assert_eq(gs.purse_copper, 9995)
|
|
|
|
|
|
func test_take_currency_clamps_at_zero():
|
|
var gs = GameState.new()
|
|
gs.grant("copper", 47)
|
|
gs.take("gold", 1)
|
|
assert_eq(gs.purse_copper, 0, "the purse never goes negative")
|
|
|
|
|
|
func test_take_non_currency_removes_from_the_inventory():
|
|
var gs = GameState.new()
|
|
gs.grant("worn_shortsword", 2)
|
|
gs.take("worn_shortsword", 1)
|
|
assert_eq(gs.inventory.get("worn_shortsword", 0), 1)
|