Special jobs: data-driven special-status registry with priority status (ISS-073, v0.37.0)
CI / build + unit + e2e (pull_request) Failing after 7m56s
CI / build + unit + e2e (pull_request) Failing after 7m56s
This commit is contained in:
+22
-3
@@ -37,6 +37,7 @@ interface PackageState {
|
||||
planeId: string | null;
|
||||
createdSimTime: number;
|
||||
deadlineSimTime: number;
|
||||
special: string | null; // v0.37.0 (ISS-073) — special status from the specials registry
|
||||
}
|
||||
|
||||
interface CatalogEntry {
|
||||
@@ -168,10 +169,11 @@ function maxRangeKm(burnPerKm: number, emptyWeightKg: number, maxFuel: number):
|
||||
return Math.log(1 + (rho * maxFuel) / emptyWeightKg) * ((emptyWeightKg + rho * maxFuel) / (rho * burnPerKm));
|
||||
}
|
||||
|
||||
// Test hook (FLIGHT_TEST_HOOKS=1): create an open package on a known route.
|
||||
async function createPackage(page: Page, fromIcao: string, toIcao: string, deadlineOffsetMs?: number, weightKg?: number): Promise<PackageState> {
|
||||
// Test hook (FLIGHT_TEST_HOOKS=1): create an open package on a known route. Omitting `special`
|
||||
// makes the hook force null (no roll), so existing specs' exact reward/rep assertions stay deterministic.
|
||||
async function createPackage(page: Page, fromIcao: string, toIcao: string, deadlineOffsetMs?: number, weightKg?: number, special?: string | null): Promise<PackageState> {
|
||||
const created = await page.request.post('/api/test/create-package', {
|
||||
data: { originIcao: fromIcao, destIcao: toIcao, deadlineOffsetMs, weightKg },
|
||||
data: { originIcao: fromIcao, destIcao: toIcao, deadlineOffsetMs, weightKg, special },
|
||||
});
|
||||
expect(created.status()).toBe(201);
|
||||
return (await created.json()) as PackageState;
|
||||
@@ -245,6 +247,23 @@ test('open packages render with names, reward and deadline; Load is enabled at a
|
||||
await expect(page.getByTestId(`onboard-package-${pkg.id}`)).toBeVisible({ timeout: 10_000 });
|
||||
});
|
||||
|
||||
test('a priority package shows its special badge on the open-package row', async ({ page }) => {
|
||||
test.setTimeout(300_000); // self-heal can take minutes after an interrupted run
|
||||
await flyHomeViaApi(page); // deterministic: the starter sits at EDDF
|
||||
|
||||
const nearest = await nearestToHub(page);
|
||||
const pkg = await createPackage(page, HUB, nearest.icao, undefined, 4_000, 'priority');
|
||||
expect(pkg.special).toBe('priority'); // hook passthrough — no roll
|
||||
|
||||
await page.goto('/');
|
||||
const row = page.locator(`li[data-testid="open-package-${pkg.id}"]`);
|
||||
await expect(row, 'the hook-created package appears in the list').toBeVisible({ timeout: 15_000 });
|
||||
// v0.37.0 (ISS-073): the row carries a "Priority" badge next to the route.
|
||||
const badge = page.getByTestId(`package-special-${pkg.id}`);
|
||||
await expect(badge).toBeVisible();
|
||||
await expect(badge).toHaveText('Priority');
|
||||
});
|
||||
|
||||
test('Load is disabled when no plane sits at the package origin', async ({ page }) => {
|
||||
test.setTimeout(300_000); // self-heal can take minutes after an interrupted run
|
||||
await flyHomeViaApi(page); // starter at EDDF — a Madrid-origin package cannot be loaded here
|
||||
|
||||
Reference in New Issue
Block a user