Files
bd2/go/internal/server/progress/progress_test.go
T

96 lines
2.8 KiB
Go

package progress
import (
"encoding/binary"
"errors"
"reflect"
"testing"
"bd2server/internal/server/wire"
)
func TestSaveUserPosition(t *testing.T) {
request := wire.AppendVarint(nil, 1, 119)
request = wire.AppendVarint(request, 2, 21)
request = wire.AppendString(request, 3, `{"MapId":211,"PlayerPosition":{"x":1.5,"y":0.0,"z":-2.5},"ColleaguePositions":null}`)
store := NewStore()
if err := store.SaveUserPosition(request); err != nil {
t.Fatal(err)
}
position, found := store.Position()
if !found || position.PackID != 21 || position.Position.MapID != 211 || position.Position.PlayerPosition.Z != -2.5 {
t.Fatalf("unexpected saved position: %+v found=%v", position, found)
}
}
func TestSaveUserPositionRejectsBadJSON(t *testing.T) {
request := wire.AppendVarint(nil, 2, 21)
request = wire.AppendString(request, 3, `{bad`)
if err := NewStore().SaveUserPosition(request); !errors.Is(err, ErrInvalidPosition) {
t.Fatalf("unexpected error: %v", err)
}
}
func TestClearTutorialIsIdempotent(t *testing.T) {
request := wire.AppendVarint(nil, 1, 116)
request = wire.AppendVarint(request, 2, 2001)
store := NewStore()
if err := store.ClearTutorial(request); err != nil {
t.Fatal(err)
}
if err := store.ClearTutorial(request); err != nil {
t.Fatal(err)
}
if !store.TutorialCleared(2001) {
t.Fatal("tutorial completion was not retained")
}
}
func TestTutorialInfoReturnsPersistedClears(t *testing.T) {
store := NewStore()
for seq, id := range []uint64{2001, 10030, 15} {
request := wire.AppendVarint(nil, 1, uint64(seq+1))
request = wire.AppendVarint(request, 2, id)
if err := store.ClearTutorial(request); err != nil {
t.Fatal(err)
}
}
code, response, ok, err := store.Handle("/TutorialInfo", wire.AppendVarint(nil, 1, 99))
if err != nil || !ok || code != 101 {
t.Fatalf("info: code=%d ok=%v err=%v", code, ok, err)
}
packed, found, err := wire.Bytes(response, 1)
if err != nil || !found {
t.Fatalf("clears missing: %v", err)
}
var got []uint64
for len(packed) > 0 {
value, n := binary.Uvarint(packed)
if n <= 0 {
t.Fatal("bad packed tutorials")
}
got = append(got, value)
packed = packed[n:]
}
want := []uint64{15, 2001, 10030}
if !reflect.DeepEqual(got, want) {
t.Fatalf("tutorials=%v want=%v", got, want)
}
}
func TestUpdateQuestPackedValues(t *testing.T) {
request := wire.AppendVarint(nil, 1, 120)
request = wire.AppendVarint(request, 2, 12)
request = wire.AppendVarint(request, 3, 21)
request = wire.AppendBytes(request, 4, []byte{121, 2}) // packed 121, 2
store := NewStore()
updated, err := store.UpdateQuest(request)
if err != nil {
t.Fatal(err)
}
quest, found := store.Quest(12)
if updated != 12 || !found || quest.PackID != 21 || len(quest.Values) != 2 || quest.Values[0] != 121 || quest.Values[1] != 2 {
t.Fatalf("unexpected quest: updated=%d found=%v quest=%+v", updated, found, quest)
}
}