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:
@@ -21,6 +21,9 @@ import { tickNow } from '@/lib/sim/engine';
|
||||
// hook deadline of expire-package) — pass an explicit value to override.
|
||||
// - weightKg (v0.27.0) forces the package weight instead of the RNG draw, so e2e
|
||||
// flows that load several packages can stay under the plane's payload deterministically.
|
||||
// - special (v0.37.0) forces the package's special status ('priority' or null). When the body
|
||||
// OMITS it, this hook forces null instead of letting generatePackage roll one — so existing
|
||||
// e2e specs that assert exact reward/rep values stay deterministic.
|
||||
// Returns 201 + the created package row.
|
||||
|
||||
export async function POST(req: Request) {
|
||||
@@ -40,7 +43,7 @@ export async function POST(req: Request) {
|
||||
}
|
||||
const input = body as Record<string, unknown>;
|
||||
for (const key of Object.keys(input)) {
|
||||
if (key !== 'originIcao' && key !== 'destIcao' && key !== 'deadlineOffsetMs' && key !== 'weightKg') {
|
||||
if (key !== 'originIcao' && key !== 'destIcao' && key !== 'deadlineOffsetMs' && key !== 'weightKg' && key !== 'special') {
|
||||
return Response.json({ error: `unknown field "${key}"` }, { status: 400 });
|
||||
}
|
||||
}
|
||||
@@ -55,6 +58,9 @@ export async function POST(req: Request) {
|
||||
if (input.weightKg !== undefined && (typeof input.weightKg !== 'number' || !Number.isFinite(input.weightKg) || input.weightKg <= 0)) {
|
||||
return Response.json({ error: 'weightKg must be a positive finite number' }, { status: 400 });
|
||||
}
|
||||
if (input.special !== undefined && input.special !== null && typeof input.special !== 'string') {
|
||||
return Response.json({ error: 'special must be a string or null' }, { status: 400 });
|
||||
}
|
||||
|
||||
try {
|
||||
const inst = await getGameDb();
|
||||
@@ -85,6 +91,8 @@ export async function POST(req: Request) {
|
||||
originIcao: input.originIcao as string | undefined,
|
||||
destIcao: input.destIcao as string | undefined,
|
||||
weightKg: input.weightKg as number | undefined,
|
||||
// Omitted → force null (no roll) so existing e2e reward/rep assertions stay deterministic.
|
||||
special: input.special === undefined ? null : (input.special as string | null),
|
||||
});
|
||||
await inst.db.insert(schema.packages).values(created);
|
||||
await persist(inst);
|
||||
|
||||
@@ -64,7 +64,8 @@ export async function POST(req: Request) {
|
||||
lon: f.properties.lon,
|
||||
}));
|
||||
const rng = mulberry32(randomInt(0, 2 ** 31));
|
||||
const created = generatePackage({ id: randomUUID(), airports, rng, nowMs: sim.clockMs, deadlineOffsetMs: HOOK_DEADLINE_MS });
|
||||
// special: null — the hook never rolls a special status (v0.37.0).
|
||||
const created = generatePackage({ id: randomUUID(), airports, rng, nowMs: sim.clockMs, deadlineOffsetMs: HOOK_DEADLINE_MS, special: null });
|
||||
await inst.db.insert(schema.packages).values(created);
|
||||
await persist(inst);
|
||||
return Response.json(created, { status: 201 });
|
||||
|
||||
Reference in New Issue
Block a user