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:
+8
-8
@@ -69,7 +69,7 @@ test('left pane renders wallet, reputation and the starter fleet at Frankfurt',
|
||||
await expect(page.getByTestId('sim-clock')).toContainText(/UTC/);
|
||||
});
|
||||
|
||||
test('time controls: pause freezes the sim and the power-of-two slider sets timeScale', async ({ page }) => {
|
||||
test('time controls: pause freezes the sim and the ladder slider sets timeScale', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
const pauseBtn = page.getByTestId('pause-toggle');
|
||||
await expect(pauseBtn).toBeVisible({ timeout: 15_000 });
|
||||
@@ -80,13 +80,13 @@ test('time controls: pause freezes the sim and the power-of-two slider sets time
|
||||
// …and in the pane itself (the refetch after POST flips the button to Resume).
|
||||
await expect(pauseBtn).toHaveText('Resume');
|
||||
|
||||
// Scale via the power-of-two slider. End jumps to max (t=1 → 64×): the label updates
|
||||
// Scale via the ladder slider. End jumps to max (t=1 → 1000×): the label updates
|
||||
// optimistically on input, and release flushes the debounced POST immediately.
|
||||
const slider = page.getByTestId('time-scale-slider');
|
||||
await slider.focus();
|
||||
await page.keyboard.press('End');
|
||||
await expect(page.getByTestId('time-scale-value')).toHaveText('64×', { timeout: 10_000 });
|
||||
await expect.poll(async () => (await getState(page)).simState.timeScale, { timeout: 10_000 }).toBe(64);
|
||||
await expect(page.getByTestId('time-scale-value')).toHaveText('1000×', { timeout: 10_000 });
|
||||
await expect.poll(async () => (await getState(page)).simState.timeScale, { timeout: 10_000 }).toBe(1000);
|
||||
|
||||
// Home jumps to min (t=0 → 1×).
|
||||
await page.keyboard.press('Home');
|
||||
@@ -116,19 +116,19 @@ test('slider commit keeps the chosen scale on screen until confirmed — no snap
|
||||
|
||||
// …and sample the displayed value rapidly across the whole commit→confirm window. With the
|
||||
// ISS-001 fix the optimistic value stays until a snapshot confirms it, so EVERY sample must
|
||||
// be '64×' — never snapping back to the previous scale for one poll cycle (the old bug).
|
||||
// be '1000×' — never snapping back to the previous scale for one poll cycle (the old bug).
|
||||
const seen: string[] = [];
|
||||
for (let i = 0; i < 30; i++) {
|
||||
seen.push(((await page.getByTestId('time-scale-value').textContent()) ?? '').trim());
|
||||
await new Promise((r) => setTimeout(r, 25));
|
||||
}
|
||||
expect(
|
||||
seen.every((v) => v === '64×'),
|
||||
`displayed scale must stay 64× during the commit window (saw: ${[...new Set(seen)].join(', ')})`,
|
||||
seen.every((v) => v === '1000×'),
|
||||
`displayed scale must stay 1000× during the commit window (saw: ${[...new Set(seen)].join(', ')})`,
|
||||
).toBe(true);
|
||||
|
||||
// …and the server confirms it.
|
||||
await expect.poll(async () => (await getState(page)).simState.timeScale, { timeout: 10_000 }).toBe(64);
|
||||
await expect.poll(async () => (await getState(page)).simState.timeScale, { timeout: 10_000 }).toBe(1000);
|
||||
|
||||
// Restore to min for later tests (afterEach restores scale anyway).
|
||||
await page.keyboard.press('Home');
|
||||
|
||||
Reference in New Issue
Block a user