Files
bd2/go/internal/server/world/pack_summary_test.go
T

69 lines
2.5 KiB
Go

package world
import (
"bytes"
"errors"
"testing"
"bd2server/internal/server/gamedata"
"bd2server/internal/server/player"
"bd2server/internal/server/stateio"
"bd2server/internal/server/wire"
)
func TestPackSummaryUsesUnlockedPackAndCollectedCounts(t *testing.T) {
s := testService()
s.packSummaryTargets = map[int]bool{21: true, 22: true}
s.packs = map[int]map[int]gamedata.QuestDesign{21: s.quests, 22: {1: {ID: 1}}}
s.transitions = map[int]gamedata.PackTransition{21: {PackID: 21, NextPackID: 22}}
attachTestStoryCatalog(s)
pack22 := s.storyCatalog.Packs[22]
pack22.Open = &gamedata.ContentOpenRule{TicketID: 122}
s.storyCatalog.Packs[22] = pack22
s.inventory, _ = player.OpenInventory(stateio.NewMemory(), s.starter)
request := wire.AppendVarint(nil, 1, 7)
code, got, handled, err := s.Handle("/PackSummaryInfoList", request)
want := wire.AppendBytes(nil, 1, wire.AppendVarint(nil, 1, 21))
if err != nil || !handled || code != 625 || !bytes.Equal(got, want) {
t.Fatalf("initial summary code=%d handled=%v body=%x err=%v", code, handled, got, err)
}
if err := s.state.ClearQuest(1, 21); err != nil {
t.Fatal(err)
}
_, got, _, err = s.Handle("/PackSummaryInfoList", request)
if err != nil || !bytes.Equal(got, want) {
t.Fatalf("quest completion changed collected rewards: %x %v", got, err)
}
for _, id := range []int{2, 3} {
if err := s.state.ClearQuest(id, 21); err != nil {
t.Fatal(err)
}
}
if _, err := s.inventory.GrantOnce("test-terminal-ticket", []gamedata.BattleReward{{Type: 19, ID: 122, Count: 1}}); err != nil {
t.Fatal(err)
}
_, got, _, err = s.Handle("/PackSummaryInfoList", request)
want = wire.AppendBytes(want, 1, wire.AppendVarint(nil, 1, 22))
if err != nil || !bytes.Equal(got, want) {
t.Fatalf("unlocked summary=%x want=%x err=%v", got, want, err)
}
// A non-target pack must never enter the reward summary even if it is
// represented in the account's PackDBInfo rows.
delete(s.packSummaryTargets, 21)
_, got, _, err = s.Handle("/PackSummaryInfoList", request)
want = wire.AppendBytes(nil, 1, wire.AppendVarint(nil, 1, 22))
if err != nil || !bytes.Equal(got, want) {
t.Fatalf("filtered summary=%x want=%x err=%v", got, want, err)
}
}
func TestPackSummaryRejectsInvalidSequence(t *testing.T) {
s := testService()
for _, request := range [][]byte{nil, {8}, wire.AppendVarint(nil, 1, 0), wire.AppendVarint(nil, 1, 0x80000000)} {
_, _, handled, err := s.Handle("/PackSummaryInfoList", request)
if !handled || !errors.Is(err, ErrInvalidRequest) {
t.Fatalf("request=%x handled=%v err=%v", request, handled, err)
}
}
}