72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
DEFAULT_INTERACTABLE_PROMPT,
|
|
DEFAULT_SOUND_EMITTER_GAIN,
|
|
DEFAULT_SOUND_EMITTER_RADIUS,
|
|
DEFAULT_TRIGGER_VOLUME_SIZE,
|
|
createDefaultEntityInstance,
|
|
createInteractableEntity,
|
|
getEntityRegistryEntry
|
|
} from "../../src/entities/entity-instances";
|
|
|
|
describe("entity registry defaults", () => {
|
|
it("creates explicit typed defaults for each supported entity kind", () => {
|
|
expect(createDefaultEntityInstance("playerStart")).toMatchObject({
|
|
kind: "playerStart",
|
|
position: { x: 0, y: 0, z: 0 },
|
|
yawDegrees: 0
|
|
});
|
|
|
|
expect(createDefaultEntityInstance("soundEmitter")).toMatchObject({
|
|
kind: "soundEmitter",
|
|
position: { x: 0, y: 0, z: 0 },
|
|
radius: DEFAULT_SOUND_EMITTER_RADIUS,
|
|
gain: DEFAULT_SOUND_EMITTER_GAIN,
|
|
autoplay: false,
|
|
loop: false
|
|
});
|
|
|
|
expect(createDefaultEntityInstance("triggerVolume")).toMatchObject({
|
|
kind: "triggerVolume",
|
|
position: { x: 0, y: 0, z: 0 },
|
|
size: DEFAULT_TRIGGER_VOLUME_SIZE,
|
|
triggerOnEnter: true,
|
|
triggerOnExit: false
|
|
});
|
|
|
|
expect(createDefaultEntityInstance("teleportTarget")).toMatchObject({
|
|
kind: "teleportTarget",
|
|
position: { x: 0, y: 0, z: 0 },
|
|
yawDegrees: 0
|
|
});
|
|
|
|
expect(createDefaultEntityInstance("interactable")).toMatchObject({
|
|
kind: "interactable",
|
|
position: { x: 0, y: 0, z: 0 },
|
|
radius: 1.5,
|
|
prompt: DEFAULT_INTERACTABLE_PROMPT,
|
|
enabled: true
|
|
});
|
|
});
|
|
|
|
it("keeps entity metadata and prompt validation explicit", () => {
|
|
expect(getEntityRegistryEntry("triggerVolume")).toMatchObject({
|
|
kind: "triggerVolume",
|
|
label: "Trigger Volume"
|
|
});
|
|
|
|
expect(
|
|
createInteractableEntity({
|
|
prompt: " Open "
|
|
}).prompt
|
|
).toBe("Open");
|
|
|
|
expect(() =>
|
|
createInteractableEntity({
|
|
prompt: " "
|
|
})
|
|
).toThrow("Interactable prompt must be non-empty.");
|
|
});
|
|
});
|