diff --git a/tests/domain/scene-document-validation.test.ts b/tests/domain/scene-document-validation.test.ts index 5fcd479f..55f1ae3f 100644 --- a/tests/domain/scene-document-validation.test.ts +++ b/tests/domain/scene-document-validation.test.ts @@ -1171,6 +1171,7 @@ describe("validateSceneDocument", () => { mode: "shader" }; document.world.shaderSky.dayTopColorHex = "bad-color" as `#${string}`; + document.world.shaderSky.horizonHeight = 0.75; document.world.shaderSky.celestial.sunDiscSizeDegrees = 0; document.world.shaderSky.clouds.coverage = 2; document.world.timeOfDay.dawn.background = { @@ -1185,6 +1186,10 @@ describe("validateSceneDocument", () => { code: "invalid-world-shader-sky-day-top-color", path: "world.shaderSky.dayTopColorHex" }), + expect.objectContaining({ + code: "invalid-world-shader-sky-horizon-height", + path: "world.shaderSky.horizonHeight" + }), expect.objectContaining({ code: "invalid-world-shader-sky-sun-disc-size", path: "world.shaderSky.celestial.sunDiscSizeDegrees" diff --git a/tests/domain/world-settings.test.ts b/tests/domain/world-settings.test.ts index 8f7dc533..a96fd0c0 100644 --- a/tests/domain/world-settings.test.ts +++ b/tests/domain/world-settings.test.ts @@ -168,4 +168,13 @@ describe("world settings helpers", () => { expect(areWorldSettingsEqual(left, right)).toBe(false); }); + + it("treats shader sky horizon height as part of authored world equality", () => { + const left = createDefaultWorldSettings(); + const right = cloneWorldSettings(left); + + right.shaderSky.horizonHeight = 0.08; + + expect(areWorldSettingsEqual(left, right)).toBe(false); + }); }); diff --git a/tests/serialization/project-document-json.test.ts b/tests/serialization/project-document-json.test.ts index 4a39c4e3..e5dfc528 100644 --- a/tests/serialization/project-document-json.test.ts +++ b/tests/serialization/project-document-json.test.ts @@ -67,6 +67,7 @@ describe("project document JSON", () => { activeScene.world.showCelestialBodies = true; activeScene.world.shaderSky.dayTopColorHex = "#4a76bb"; activeScene.world.shaderSky.dayBottomColorHex = "#d6efff"; + activeScene.world.shaderSky.horizonHeight = -0.06; activeScene.world.shaderSky.stars.density = 0.72; activeScene.world.shaderSky.clouds.coverage = 0.63; activeScene.world.shaderSky.clouds.tintHex = "#ece7df"; diff --git a/tests/unit/world-shader-sky.test.ts b/tests/unit/world-shader-sky.test.ts index 46abef58..828080e8 100644 --- a/tests/unit/world-shader-sky.test.ts +++ b/tests/unit/world-shader-sky.test.ts @@ -18,6 +18,7 @@ describe("resolveWorldShaderSkyRenderState", () => { world.showCelestialBodies = true; world.shaderSky.dayTopColorHex = "#88ccff"; world.shaderSky.dayBottomColorHex = "#dff3ff"; + world.shaderSky.horizonHeight = -0.08; world.timeOfDay.dawn.background = { mode: "verticalGradient", topColorHex: "#ff8855", @@ -106,6 +107,7 @@ describe("resolveWorldShaderSkyRenderState", () => { expect(dawnSky).not.toBeNull(); expect(noonSky?.sky.topColorHex).toBe("#88ccff"); expect(noonSky?.sky.bottomColorHex).toBe("#dff3ff"); + expect(noonSky?.sky.horizonHeight).toBe(-0.08); expect(dawnSky?.sky.topColorHex).not.toBe(noonSky?.sky.topColorHex); expect(dawnSky?.sky.topColorHex).not.toBe(midnightSky?.sky.topColorHex); expect(midnightSky?.stars.visibility ?? 0).toBeGreaterThan(