59 lines
1.9 KiB
Go
59 lines
1.9 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestSaveNewInventoryItemsInitializesMissingCollections(t *testing.T) {
|
|
t.Chdir(t.TempDir())
|
|
if err := os.WriteFile("freesr-data.json", []byte(`{"account_name":"test-player","player_uid":52022}`), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := SaveNewLightcones([]Lightcone{{ItemID: 23001, InternalUID: 1, Level: 1, Rank: 1}}); err != nil {
|
|
t.Fatalf("SaveNewLightcones: %v", err)
|
|
}
|
|
if err := SaveNewRelics([]Relic{{RelicID: 31001, RelicSetID: 3101, MainAffixID: 1, InternalUID: 2}}); err != nil {
|
|
t.Fatalf("SaveNewRelics: %v", err)
|
|
}
|
|
|
|
raw, err := os.ReadFile("freesr-data.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var saved struct {
|
|
AccountName string `json:"account_name"`
|
|
PlayerUID uint32 `json:"player_uid"`
|
|
Lightcones []Lightcone `json:"lightcones"`
|
|
Relics []Relic `json:"relics"`
|
|
}
|
|
if err := json.Unmarshal(raw, &saved); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if saved.AccountName != "test-player" || saved.PlayerUID != 52022 {
|
|
t.Fatalf("account fields were not preserved: %+v", saved)
|
|
}
|
|
if len(saved.Lightcones) != 1 || saved.Lightcones[0].ItemID != 23001 {
|
|
t.Fatalf("missing Light Cone was not initialized: %+v", saved.Lightcones)
|
|
}
|
|
if len(saved.Relics) != 1 || saved.Relics[0].RelicID != 31001 {
|
|
t.Fatalf("missing Relic collection was not initialized: %+v", saved.Relics)
|
|
}
|
|
}
|
|
|
|
func TestReadInventoryEntriesTreatsNullAsEmptyAndRejectsMalformed(t *testing.T) {
|
|
for _, root := range []map[string]json.RawMessage{
|
|
{}, {"lightcones": json.RawMessage("null")},
|
|
} {
|
|
entries, err := readInventoryEntries(root, "lightcones")
|
|
if err != nil || len(entries) != 0 {
|
|
t.Fatalf("expected empty collection, got entries=%v err=%v", entries, err)
|
|
}
|
|
}
|
|
if _, err := readInventoryEntries(map[string]json.RawMessage{"lightcones": json.RawMessage(`{"not":"an array"}`)}, "lightcones"); err == nil {
|
|
t.Fatal("malformed inventory collection was accepted")
|
|
}
|
|
}
|