Fix: replaced keys become stale

This commit is contained in:
2026-05-14 11:25:13 +02:00
parent e616ea5043
commit 8fcf0863cc
3 changed files with 92 additions and 11 deletions
+51
View File
@@ -6433,6 +6433,57 @@ func TestResolveOverrideTargetPrefersIDOverKey(t *testing.T) {
}
}
func TestUpdateOverrideRowKeyRetiresOldKeyEvenIfReferenced(t *testing.T) {
row := map[string]any{"id": 443, "key": "spells:etherealness"}
rowByKey := map[string]map[string]any{
"spells:etherealness": row,
}
lockData := map[string]int{
"spells:etherealness": 443,
}
expanded := map[string]any{
"key": "spells:greater_sanctuary",
}
changed, retiredKey, err := updateOverrideRowKey("spells", row, expanded, rowByKey, lockData)
if err != nil {
t.Fatalf("updateOverrideRowKey failed: %v", err)
}
if !changed {
t.Fatal("expected key reassignment to mark the row changed")
}
if retiredKey != "spells:etherealness" {
t.Fatalf("expected retired key spells:etherealness, got %q", retiredKey)
}
if row["key"] != "spells:greater_sanctuary" {
t.Fatalf("expected row key to be updated, got %v", row["key"])
}
if _, ok := lockData["spells:etherealness"]; ok {
t.Fatalf("expected old key to be removed from lock data, got %#v", lockData)
}
if lockData["spells:greater_sanctuary"] != 443 {
t.Fatalf("expected new key to be locked to row 443, got %#v", lockData)
}
referencedKeys := map[string]struct{}{
"spells:etherealness": {},
}
retiredKeys := map[string]struct{}{
retiredKey: {},
}
rows := []map[string]any{row}
pruned, updated := pruneLockDataToActiveRows(lockData, rows, referencedKeys, retiredKeys)
if updated != 0 {
t.Fatalf("expected no lock id updates after prune, got %d", updated)
}
if pruned != 0 {
t.Fatalf("expected no additional prune once old key was already retired, got %d", pruned)
}
if _, ok := lockData["spells:etherealness"]; ok {
t.Fatalf("expected retired key to stay removed even when referenced, got %#v", lockData)
}
}
func TestBuildPrunesLockedIDThatTargetsManualBaseSpace(t *testing.T) {
root := testProjectRoot(t)
mkdirAll(t, filepath.Join(root, "topdata", "data", "dense", "modules"))