From a1b6613c6c6a2f8d6e1ecd47e766bd40f92ac295 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Sun, 28 Jun 2026 02:40:30 -0400 Subject: feat: admin accounts, god mode, OLC commands like dig/room, 'inline' objects changed to 'local' objects --- internal/validate/inline_test.go | 134 --------------------------------------- 1 file changed, 134 deletions(-) delete mode 100644 internal/validate/inline_test.go (limited to 'internal/validate/inline_test.go') diff --git a/internal/validate/inline_test.go b/internal/validate/inline_test.go deleted file mode 100644 index 5816c26..0000000 --- a/internal/validate/inline_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package validate - -import ( - "os" - "path/filepath" - "testing" - - "thehouseoficarus/internal/behavior" - "thehouseoficarus/internal/item" - "thehouseoficarus/internal/object" - "thehouseoficarus/internal/world" -) - -func TestValidateInlineObjectPassiveOK(t *testing.T) { - robj := world.RoomObject{ID: "window", Inline: &object.ObjectDef{ - Name: "window", - Hidden: true, - Description: behavior.DescList{{Text: "A small window."}}, - }} - issues := validateInlineObject(1001, robj, nil, nil) - if len(issues) != 0 { - t.Errorf("expected no issues for passive inline object, got: %+v", issues) - } -} - -func TestValidateInlineObjectRejectsInteractable(t *testing.T) { - robj := world.RoomObject{ID: "rock", Inline: &object.ObjectDef{ - Name: "rock", - Gather: &behavior.GatherConfig{}, - }} - issues := validateInlineObject(1001, robj, nil, nil) - if !containsMsg(issues, "interactable behavior") { - t.Errorf("expected interactable-behavior error, got: %+v", issues) - } -} - -func TestValidateInlineObjectRequiresName(t *testing.T) { - robj := world.RoomObject{ID: "x", Inline: &object.ObjectDef{ - Description: behavior.DescList{{Text: "no name"}}, - }} - issues := validateInlineObject(1001, robj, nil, nil) - if !containsMsg(issues, "has no name") { - t.Errorf("expected has-no-name error, got: %+v", issues) - } -} - -func TestValidateInlineObjectStrayIDWarns(t *testing.T) { - robj := world.RoomObject{ID: "anvil", Inline: &object.ObjectDef{Name: "anvil", ID: "anvil"}} - issues := validateInlineObject(1001, robj, nil, nil) - if !containsMsg(issues, "ignored on inline objects") { - t.Errorf("expected stray-id warning, got: %+v", issues) - } -} - -func newSource(dir string) Source { - return Source{ - DataDir: dir, - Items: item.NewItemStore(dir), - Objects: object.NewObjectStore(dir), - Mobs: world.NewMobStore(dir), - World: world.New(dir), - } -} - -func writeFile(t *testing.T, path, body string) { - t.Helper() - if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { - t.Fatal(err) - } - if err := os.WriteFile(path, []byte(body), 0o644); err != nil { - t.Fatal(err) - } -} - -func TestValidateRoomsSameNameCollision(t *testing.T) { - dir := t.TempDir() - writeFile(t, filepath.Join(dir, "rooms", "1.yaml"), `name: Test Room -objects: - - id: ghost_object - - name: sign - description: "one" - - name: sign - description: "two" -`) - issues := validateRooms(newSource(dir)) - - if !containsMsg(issues, "nonexistent object \"ghost_object\"") { - t.Errorf("expected missing-reference error, got: %+v", issues) - } - if !containsMsg(issues, "objects share the name \"sign\"") { - t.Errorf("expected same-name collision error, got: %+v", issues) - } -} - -func TestValidateRoomsDefIDCollisionAndDuplicateRefs(t *testing.T) { - dir := t.TempDir() - writeFile(t, filepath.Join(dir, "objects", "anvil.yaml"), "name: heavy anvil\n") - writeFile(t, filepath.Join(dir, "objects", "copper_rock.yaml"), "name: copper rock\n") - writeFile(t, filepath.Join(dir, "rooms", "1.yaml"), `name: Test Room -objects: - - id: copper_rock - - id: copper_rock - - id: anvil - - name: anvil - description: "an inline thing that collides with the file id" -`) - issues := validateRooms(newSource(dir)) - - // Inline name "anvil" normalizes to the referenced file id "anvil". - if !containsMsg(issues, "object id collision \"anvil\"") { - t.Errorf("expected defID collision error, got: %+v", issues) - } - // Two references to the same copper_rock file are allowed. - if containsMsg(issues, "name \"copper rock\"") || containsMsg(issues, "collision \"copper_rock\"") { - t.Errorf("repeated references to one file object should not collide, got: %+v", issues) - } -} - -func TestValidateRoomsPartialNameSiblingsOK(t *testing.T) { - dir := t.TempDir() - writeFile(t, filepath.Join(dir, "rooms", "1.yaml"), `name: Test Room -objects: - - name: rusty sign - description: "rusty" - - name: shiny sign - description: "shiny" -`) - issues := validateRooms(newSource(dir)) - for _, iss := range issues { - if iss.Type == "duplicate" { - t.Errorf("partial-name siblings should not collide, got: %+v", iss) - } - } -} -- cgit v1.2.3