Add simplified Open Practice flow and reorganize

This commit is contained in:
larssand
2026-08-24 19:25:21 +02:00
parent 5a6e51c51b
commit 2e6866a013
13 changed files with 481 additions and 55 deletions

View File

@@ -3,10 +3,12 @@ import assert from "node:assert/strict";
import {
applyBumpsForRace,
buildOpenPracticeBundle,
buildRaceFormatConfigFromForm,
buildRaceSessionsFromWizard,
generateFinalsForRace,
generateQualifyingForRace,
normalizeEvent,
reseedUpcomingQualifying,
} from "../src/event_race_logic.js";
import {
@@ -91,6 +93,46 @@ test("race format form normalizes limits and preserves participants and teams",
assert.deepEqual(config.teams, [{ id: "team_1", name: "Red" }]);
});
test("open practice bundle is untimed, unrestricted, and independent of race presets", () => {
const uid = createUid();
const bundle = buildOpenPracticeBundle(
{ name: "Friday Practice", date: "2026-08-24" },
{
uid,
normalizeEvent: (event) => ({ ...event, raceConfig: { presetId: "club_qualifying", driverIds: ["old"] } }),
buildRaceSession: (eventId, name, type, durationMin, overrides) => ({ eventId, name, type, durationMin, ...overrides }),
}
);
assert.equal(bundle.event.name, "Friday Practice");
assert.equal(bundle.event.classId, "");
assert.equal(bundle.event.mode, "race");
assert.equal(bundle.event.raceConfig.presetId, "custom");
assert.equal(bundle.event.raceConfig.practiceOnly, true);
assert.equal(bundle.event.raceConfig.participantsConfigured, false);
assert.deepEqual(bundle.event.raceConfig.driverIds, []);
assert.equal(bundle.session.eventId, bundle.event.id);
assert.equal(bundle.session.type, "open_practice");
assert.equal(bundle.session.startMode, "mass");
assert.equal(bundle.session.followUpSec, 0);
assert.deepEqual(bundle.session.driverIds, []);
assert.equal(isUntimedSession(bundle.session), true);
});
test("event normalization preserves the practice-only marker", () => {
const event = normalizeEvent(
{ id: "event_1", raceConfig: { practiceOnly: true } },
{
normalizeBrandingConfig: (branding) => branding || {},
normalizeStartMode,
normalizeRaceTeam: (team) => team,
}
);
assert.equal(event.raceConfig.practiceOnly, true);
assert.equal(event.raceConfig.presetId, "custom");
});
test("race wizard creates configured practice, qualifying, and endurance sessions", () => {
const event = {
id: "event_1",