Queue consumed on dispatch; engine chain hardened; queued planes unsellable (ISS-088)
CI / build + unit + e2e (pull_request) Failing after 12m59s
CI / build + unit + e2e (pull_request) Failing after 12m59s
This commit is contained in:
+12
-2
@@ -495,20 +495,30 @@ test('per-plane queues are independent; landing auto-chains the next queued leg'
|
||||
await expect(page.getByTestId(`queue-leg-${secondId}-0`), 'the cancelled leg is gone').toHaveCount(0, { timeout: 15_000 });
|
||||
await expect(starterLeg0, 'the starter queue is untouched by the other plane cancel').toContainText(a.icao);
|
||||
|
||||
// Fly the STARTER to its first queued destination…
|
||||
// Fly the STARTER to its first queued destination — v0.46.0 consumes queue[0] on dispatch, so the
|
||||
// response snapshot must already show only [b] left (previously the leg stayed queued and the
|
||||
// landing chained a zero-distance self-hop a→a before reaching b).
|
||||
const flyRes = await page.request.post(`/api/planes/${STARTER}/fly`, { data: { destIcao: a.icao } });
|
||||
expect(flyRes.status()).toBe(200);
|
||||
const flyBody = (await flyRes.json()) as StateBody;
|
||||
expect(flyBody.planes.find((x) => x.id === STARTER)!.queue, 'queue[0] consumed on dispatch').toEqual([b.icao]);
|
||||
|
||||
// …fast-forward; on landing at a the server AUTO-CHAINS queue[0] (b) in the same tick — but with
|
||||
// the second plane still grounded, ISS-057 slows the sim to 1× on that landing. Wait for the chain…
|
||||
await setScale(page, SCALE);
|
||||
const seen: Array<{ locationIcao: string; destIcao: string | null }> = [];
|
||||
await expect
|
||||
.poll(async () => {
|
||||
const p = (await getState(page)).planes.find((x) => x.id === STARTER);
|
||||
if (p && p.status === 'flying') seen.push({ locationIcao: p.locationIcao, destIcao: p.destIcao });
|
||||
return !!p && p.status === 'flying' && p.destIcao === b.icao;
|
||||
}, { timeout: 240_000, message: `waiting for the auto-chained leg ${a} → ${b} to start` })
|
||||
}, { timeout: 120_000, message: `waiting for the auto-chained leg ${a} → ${b} to start` })
|
||||
.toBe(true);
|
||||
|
||||
// …and NO snapshot may show the phantom self-hop (location a with dest a) — every observed state
|
||||
// is either the outbound leg (HUB→a) or the chained leg (a→b).
|
||||
expect(seen.filter((s) => s.locationIcao === a.icao && s.destIcao === a.icao), 'phantom self-hop a → a').toEqual([]);
|
||||
|
||||
// …then restore speed so the chained leg fast-forwards too.
|
||||
await setScale(page, SCALE);
|
||||
await expect
|
||||
|
||||
Reference in New Issue
Block a user