Files
GaCy-GO/internal/gameserver/relic_client_capture_test.go
T

67 lines
1.8 KiB
Go

package gameserver
import (
"encoding/json"
"os"
"testing"
)
func TestCapturedPlanarRelicAffixesMatchCatalog(t *testing.T) {
chdirRepositoryRoot(t)
raw, err := os.ReadFile("resources/RelicClientCapture.json")
if err != nil {
t.Fatal(err)
}
var capture struct {
Relics []struct{ ID, SetID, MainAffixGroup, SubAffixGroup uint32 } `json:"relics"`
Main []struct{ GroupID, AffixID, Property uint32 } `json:"main_affixes"`
Sub []struct{ GroupID, AffixID, Property uint32 } `json:"sub_affixes"`
}
if err := json.Unmarshal(raw, &capture); err != nil {
t.Fatal(err)
}
if _, err := loadInventoryItems(); err != nil {
t.Fatal(err)
}
if len(capture.Relics) != 4 {
t.Fatalf("captured %d relics", len(capture.Relics))
}
for _, row := range capture.Relics {
var found bool
for _, item := range inventoryCatalog.Relics {
if item.RelicID != row.ID {
continue
}
found = true
if item.RelicSetID != row.SetID {
t.Fatalf("relic %d has wrong set", row.ID)
}
var mainProperty uint32
for _, main := range capture.Main {
if main.GroupID == row.MainAffixGroup && main.AffixID == item.MainAffixID {
mainProperty = main.Property
}
}
if mainProperty == 0 {
t.Fatalf("relic %d main affix is outside its group", row.ID)
}
seen := make(map[uint32]bool)
for _, affix := range item.SubAffixes {
valid := false
for _, sub := range capture.Sub {
if sub.GroupID == row.SubAffixGroup && sub.AffixID == affix.SubAffixID && sub.Property != mainProperty {
valid = true
}
}
if !valid || seen[affix.SubAffixID] {
t.Fatalf("relic %d has invalid or duplicate sub affix %d", row.ID, affix.SubAffixID)
}
seen[affix.SubAffixID] = true
}
}
if !found {
t.Fatalf("relic %d missing from catalog", row.ID)
}
}
}