Files
GaCy-GO/internal/common/persistent_store_test.go
T

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")
}
}