aboutsummaryrefslogtreecommitdiff
path: root/internal/world/rekey_objects_test.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-10-05 17:05:14 -0400
committerhistoria <[not public]>2026-10-05 17:05:14 -0400
commite42952469dadfb3535633c66c881050ac128703c (patch)
treea78f7396b72cdbd6fa4f6c454c830f40cf2ad0cb /internal/world/rekey_objects_test.go
parent90ad8c0c33b519d5830c69d4128bdc984b5e9de8 (diff)
downloadthehouseoficarus-e42952469dadfb3535633c66c881050ac128703c.tar.gz
fix: gather verbs, walk oom, admin path bypass, roulette refund
Diffstat (limited to 'internal/world/rekey_objects_test.go')
-rw-r--r--internal/world/rekey_objects_test.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/internal/world/rekey_objects_test.go b/internal/world/rekey_objects_test.go
index 7ee2de3..908e30b 100644
--- a/internal/world/rekey_objects_test.go
+++ b/internal/world/rekey_objects_test.go
@@ -35,3 +35,31 @@ func TestRekeyRoomsUpdatesObjStateRoomID(t *testing.T) {
t.Fatalf("AllObjInstances(1) = %d entries, want 0 (stale old room)", len(got))
}
}
+
+// Regression: an object away from its home room is keyed by its current room,
+// so the old key-driven walk left its HomeRoomID/WanderRooms stale and a later
+// entry to the renamed home created a duplicate instance.
+func TestRekeyRoomsUpdatesAwayFromHomeObject(t *testing.T) {
+ w := New(t.TempDir())
+ // Declared in home room 1, currently wandering in room 5.
+ w.objStates[w.ObjStateKey(5, "fishing_spot", 0)] = &ObjState{
+ RoomID: 5,
+ HomeRoomID: 1,
+ DefID: "fishing_spot",
+ Index: 0,
+ WanderRooms: []int{1, 5},
+ }
+
+ w.RekeyRooms(map[int]int{1: 20})
+
+ inst := w.GetObjState(5, "fishing_spot", 0)
+ if inst == nil {
+ t.Fatal("away object state lost after rekey")
+ }
+ if inst.HomeRoomID != 20 {
+ t.Fatalf("HomeRoomID = %d, want 20", inst.HomeRoomID)
+ }
+ if got := inst.WanderRooms; len(got) != 2 || got[0] != 20 || got[1] != 5 {
+ t.Fatalf("WanderRooms = %v, want [20 5]", got)
+ }
+}