raceday kontroller

This commit is contained in:
larssand
2026-09-05 09:59:55 +02:00
parent bfe13de59c
commit 78c650bde7
6 changed files with 70 additions and 4 deletions

View File

@@ -66,3 +66,23 @@ test("open practice allows an unset lap window but still requires the main decod
result = buildRaceDayPreflight(state, practice, { backendAvailable: true });
assert.equal(result.ready, false);
});
test("preflight presents blockers before warnings without changing the original checks", async () => {
const { sortRaceDayChecks } = await import("../src/race_day_view.js");
const checks = [{ id: "audio", level: "warning" }, { id: "session", level: "ok" }, { id: "decoder", level: "error" }];
assert.deepEqual(sortRaceDayChecks(checks).map((item) => item.id), ["decoder", "audio", "session"]);
assert.equal(checks[0].id, "audio");
});
test("preflight shortcuts respect driver, shared-car and team setup", async () => {
const { getRaceDayCheckAction: action } = await import("../src/race_day_view.js");
const missing = { id: "transponders", level: "error" };
assert.equal(action(missing, { mode: "race", type: "qualification" }).view, "drivers");
assert.equal(action(missing, { mode: "track", type: "heat" }).view, "cars");
assert.equal(action(missing, { mode: "race", type: "team_race" }).view, "race_setup");
assert.equal(action({ id: "participants", level: "error" }, { mode: "track" }).view, "events");
assert.equal(action({ id: "decoder", level: "error" }).view, "settings");
assert.equal(action({ id: "session", level: "error" }).view, "timing");
assert.equal(action({ id: "lap_window", level: "warning" }, { mode: "race" }).field, "minLapSec");
assert.equal(action({ id: "decoder", level: "ok" }), null);
});