You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.3 KiB
Go

package game
import (
"testing"
"time"
"github.com/denisovdennis/autohero/internal/model"
"github.com/denisovdennis/autohero/internal/tuning"
)
// ApplyVictoryRewards + GenerateLoot: gold only if gold roll succeeds; force chance 1.0 so the test is deterministic.
func TestApplyVictoryRewards_awardsGoldFromLoot(t *testing.T) {
v := tuning.DefaultValues()
v.GoldDropChance = 1.0
tuning.Set(v)
t.Cleanup(func() { tuning.Set(tuning.DefaultValues()) })
hero := &model.Hero{
ID: 1, Level: 1, Gold: 0, XP: 0,
State: model.StateFighting,
}
enemy := &model.Enemy{
Type: model.EnemyWolf, Name: "Wolf",
MinLevel: 1, MaxLevel: 5,
XPReward: 10,
}
beforeGold := hero.Gold
drops := ApplyVictoryRewards(hero, enemy, time.Now(), VictoryRewardDeps{})
if len(drops) < 1 {
t.Fatal("expected at least one loot drop")
}
var hasGold bool
for _, d := range drops {
if d.ItemType == "gold" && d.GoldAmount > 0 {
hasGold = true
break
}
}
if !hasGold {
t.Fatalf("expected a gold entry in drops: %#v", drops)
}
if hero.Gold <= beforeGold {
t.Fatalf("hero gold should increase (loot gold); before=%d after=%d", beforeGold, hero.Gold)
}
if model.SumGoldFromLootDrops(drops) <= 0 {
t.Fatal("SumGoldFromLootDrops should be positive for victory drops")
}
}