96 lines
2.8 KiB
Go
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)
|
|
}
|
|
}
|