feat: v0.14.0 — ISS-006 time-scale slider values up to 1000x; tests use fastest time
CI / build + unit + e2e (pull_request) Failing after 4m52s
CI / build + unit + e2e (pull_request) Failing after 4m52s
This commit is contained in:
@@ -31,19 +31,24 @@ describe('POST /api/sim', () => {
|
||||
expect(body.paused).toBe(false);
|
||||
});
|
||||
|
||||
it('sets and clamps timeScale into [1, 64]', async () => {
|
||||
const hi = await post({ timeScale: 500 });
|
||||
it('sets and clamps timeScale into [1, 1000]', async () => {
|
||||
const hi = await post({ timeScale: 2000 });
|
||||
expect(hi.status).toBe(200);
|
||||
expect(((await hi.json()) as { timeScale: number }).timeScale).toBe(64);
|
||||
expect(((await hi.json()) as { timeScale: number }).timeScale).toBe(1000);
|
||||
|
||||
const lo = await post({ timeScale: 0.1 });
|
||||
expect(lo.status).toBe(200);
|
||||
expect(((await lo.json()) as { timeScale: number }).timeScale).toBe(1);
|
||||
|
||||
// The top of the power-of-two ladder passes through unclamped (v0.9.2).
|
||||
const max = await post({ timeScale: 64 });
|
||||
// The top of the ladder passes through unclamped (v0.14.0).
|
||||
const max = await post({ timeScale: 1000 });
|
||||
expect(max.status).toBe(200);
|
||||
expect(((await max.json()) as { timeScale: number }).timeScale).toBe(64);
|
||||
expect(((await max.json()) as { timeScale: number }).timeScale).toBe(1000);
|
||||
|
||||
// In-range values pass through unclamped — ladder and off-ladder alike.
|
||||
const ladder = await post({ timeScale: 500 });
|
||||
expect(ladder.status).toBe(200);
|
||||
expect(((await ladder.json()) as { timeScale: number }).timeScale).toBe(500);
|
||||
|
||||
const mid = await post({ timeScale: 37 });
|
||||
expect(mid.status).toBe(200);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { applyTimeControls } from '@/lib/sim/engine';
|
||||
|
||||
// POST /api/sim — set sim time controls (v0.7.0). Body: { timeScale?: 1–64, paused?: boolean }.
|
||||
// POST /api/sim — set sim time controls (v0.7.0). Body: { timeScale?: 1–1000, paused?: boolean }.
|
||||
// Ticks the clock first (so the response reflects current game time), then applies
|
||||
// and persists the new controls. Returns the updated simState.
|
||||
|
||||
@@ -23,7 +23,7 @@ export async function POST(req: Request) {
|
||||
}
|
||||
}
|
||||
if (input.timeScale !== undefined && (typeof input.timeScale !== 'number' || !Number.isFinite(input.timeScale))) {
|
||||
return Response.json({ error: 'timeScale must be a finite number (1–64)' }, { status: 400 });
|
||||
return Response.json({ error: 'timeScale must be a finite number (1–1000)' }, { status: 400 });
|
||||
}
|
||||
if (input.paused !== undefined && typeof input.paused !== 'boolean') {
|
||||
return Response.json({ error: 'paused must be a boolean' }, { status: 400 });
|
||||
|
||||
@@ -17,7 +17,7 @@ import { tickNow } from '@/lib/sim/engine';
|
||||
// (game time) so the next fast tick expires it; 404 if unknown/not open.
|
||||
// - without: creates a fresh open package with the same short deadline.
|
||||
|
||||
const HOOK_DEADLINE_MS = 10_000; // game ms past the current clock (~0.2 s real at 60×)
|
||||
const HOOK_DEADLINE_MS = 10_000; // game ms past the current clock (≈ 0.01 s real at the fastest 1000×)
|
||||
|
||||
export async function POST(req: Request) {
|
||||
if (process.env.FLIGHT_TEST_HOOKS !== '1') {
|
||||
|
||||
Reference in New Issue
Block a user