Files
bd2/go/internal/server/player/wallet_test.go
T

46 lines
1.4 KiB
Go

package player
import (
"math"
"path/filepath"
"testing"
"bd2server/internal/server/gamedata"
)
func TestWalletGrantPersistsAndIsIdempotent(t *testing.T) {
path := filepath.Join(t.TempDir(), "wallet.json")
wallet, err := OpenWallet(testStore(path), Currency{Gold: 100})
if err != nil {
t.Fatal(err)
}
rewards := []gamedata.Reward{{Type: 2, Count: 100000000}, {Type: 4, Count: 1500}, {Type: 3, Count: 70}, {Type: 12, Count: 45}, {Type: 25, ID: 210, Count: 1}}
if _, err := wallet.GrantQuestOnce("quest:1", rewards); err != nil {
t.Fatal(err)
}
wallet, err = OpenWallet(testStore(path), Currency{})
if err != nil {
t.Fatal(err)
}
if _, err := wallet.GrantQuestOnce("quest:1", rewards); err != nil {
t.Fatal(err)
}
got := wallet.Snapshot()
if got.Jewelry != 100000000 || got.Gold != 1600 || got.FreeJewelry != 70 || got.Catalyst != 45 {
t.Fatalf("wallet=%+v", got)
}
}
func TestWalletPaidJewelryOverflowDoesNotCommitGrant(t *testing.T) {
wallet, err := OpenWallet(testStore(filepath.Join(t.TempDir(), "wallet.json")), Currency{Jewelry: math.MaxUint64})
if err != nil {
t.Fatal(err)
}
if _, err := wallet.GrantQuestOnce("paid-overflow", []gamedata.Reward{{Type: 4, Count: 10}, {Type: 2, Count: 1}}); err == nil {
t.Fatal("paid jewelry overflow accepted")
}
if got := wallet.Snapshot(); got.Jewelry != math.MaxUint64 || got.Gold != 0 || wallet.WasGranted("paid-overflow") {
t.Fatalf("failed grant changed wallet: %+v", got)
}
}