Fix: replaced keys become stale
This commit is contained in:
@@ -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"))
|
||||
|
||||
Reference in New Issue
Block a user