Files
bd2/go/internal/server/gamedata/food_test.go
T

61 lines
1.9 KiB
Go

package gamedata
import (
"bd2server/internal/server/wire"
"database/sql"
"testing"
)
func TestFoodRecoveryUsesFavoriteReplacementAndFloatMidpointEven(t *testing.T) {
food := Food{Type: 1, Point: 10, FavoritePoint: 15, FavoriteUniqueCharIDs: []uint64{35}}
got, err := food.Recovery(350, 100, 2)
if err != nil || got != 30 {
t.Fatalf("favorite=%d err=%v", got, err)
}
got, err = food.Recovery(360, 100, 2)
if err != nil || got != 20 {
t.Fatalf("ordinary=%d err=%v", got, err)
}
for _, test := range []struct{ maximum, want uint64 }{{5, 2}, {7, 4}} {
got, err = (Food{Point: 50, RecoveryType: 1}).Recovery(350, test.maximum, 1)
if err != nil || got != test.want {
t.Fatalf("percentage max=%d got=%d err=%v", test.maximum, got, err)
}
}
for _, food := range []Food{{Type: 2, Point: 100}, {FoodBuffID: 101, Point: 100}, {RecoveryType: 2, Point: 100}, {}} {
if _, err := food.Recovery(350, 100, 1); err == nil {
t.Fatalf("accepted invalid food %+v", food)
}
}
}
func TestFoodLoaderReadsFavoriteIDsAndProtoDefaults(t *testing.T) {
db, err := sql.Open("sqlite", ":memory:")
if err != nil {
t.Fatal(err)
}
defer db.Close()
if _, err = db.Exec("CREATE TABLE FoodTable(id INTEGER PRIMARY KEY,ProtoBuf BLOB)"); err != nil {
t.Fatal(err)
}
raw := wire.AppendVarint(nil, 7, 101)
raw = wire.AppendVarint(raw, 13, 10)
if _, err = db.Exec("INSERT INTO FoodTable VALUES(101,?)", raw); err != nil {
t.Fatal(err)
}
raw = wire.AppendVarint(nil, 7, 201)
for field, value := range map[int]uint64{1: 15, 2: 35, 4: 1, 13: 10} {
raw = wire.AppendVarint(raw, field, value)
}
if _, err = db.Exec("INSERT INTO FoodTable VALUES(201,?)", raw); err != nil {
t.Fatal(err)
}
design, err := loadFoodDesign(db)
if err != nil {
t.Fatal(err)
}
if design.Foods[101].Type != 0 || design.Foods[201].FavoritePoint != 15 || design.Foods[201].FavoriteUniqueCharIDs[0] != 35 {
t.Fatalf("design=%+v", design)
}
}