import assert from "node:assert/strict"; export async function runRaceSetupSmoke({ evaluate, navigate, fill, savedState, waitFor, pause }) { const click = id => evaluate(`document.getElementById(${JSON.stringify(id)}).click()`); const submit = id => evaluate(`document.getElementById(${JSON.stringify(id)}).requestSubmit()`); const findEvent = async name => (await savedState()).events.find(event => event.name === name); async function editEvent(event, view, readyForm) { await click("event-edit-" + event.id); await fill("eventEditForm", { name: event.name + " Updated" }); await submit("eventEditForm"); await waitFor(async () => Boolean(await findEvent(event.name + " Updated")), "event name saved"); await navigate(view, readyForm); await click("event-edit-" + event.id); assert.equal(await evaluate('document.getElementById("eventEditForm").elements.namedItem("name").value'), event.name + " Updated"); await click("eventEditCancel"); await click("event-manage-" + event.id); } await navigate("events", "eventForm"); await fill("eventForm", { name: "Browser Sponsor", date: "2026-09-08", classId: "test_class" }); await submit("eventForm"); await waitFor(async () => Boolean(await findEvent("Browser Sponsor")), "create sponsor event"); const sponsor = await findEvent("Browser Sponsor"); await editEvent(sponsor, "events", "eventForm"); await fill("sessionForm", { name: "Sponsor Heat", type: "heat", durationMin: "5", startMode: "mass" }); await submit("sessionForm"); await waitFor(async () => (await savedState()).sessions.some(session => session.name === "Sponsor Heat" && session.eventId === sponsor.id), "sponsor session"); console.log("PASS sponsor-event create/edit/reload and session creation"); await navigate("race_setup", "raceWizardStepForm"); await fill("raceWizardStepForm", { name: "Browser Endurance", date: "2026-09-08", classId: "test_class", presetId: "endurance" }); await click("raceWizardNext"); await click("wizardSelectAllParticipants"); await click("raceWizardNext"); await evaluate('document.querySelector("#raceWizardPlanForm [name=createTeamRace]").checked = true'); await fill("raceWizardPlanForm", { teamRaceDurationMin: "45" }); await click("raceWizardNext"); await click("raceWizardCreate"); await waitFor(async () => Boolean(await findEvent("Browser Endurance")), "wizard race creation"); const race = await findEvent("Browser Endurance"); await navigate("race_setup", "raceWizardStepForm"); await editEvent(race, "race_setup", "raceWizardStepForm"); const current = await savedState(); const driver = current.drivers.find(item => item.name === "Browser Driver Updated"); const car = current.cars.find(item => item.name === "Browser Car Updated"); const raceState = () => findEvent("Browser Endurance Updated"); await fill("teamForm", { teamName: "Browser Team" }); await evaluate(`document.querySelector('[form="teamForm"][name="teamDriverIds"][value="${driver.id}"]').checked=true`); await submit("teamForm"); await waitFor(async () => (await raceState()).raceConfig.teams.some(team => team.name === "Browser Team"), "team create"); const team = (await raceState()).raceConfig.teams.find(item => item.name === "Browser Team"); assert.deepEqual(team.driverIds, [driver.id]); await click("team-edit-" + team.id); await fill("teamEditForm", { teamName: "Browser Team Updated" }); await evaluate(`document.querySelector('#teamEditForm [name="teamCarIds"][value="${car.id}"]').checked=true`); await pause(5500); assert.equal(await evaluate('document.getElementById("teamEditForm").elements.namedItem("teamName").value'), "Browser Team Updated"); await click("teamEditSave"); await waitFor(async () => (await raceState()).raceConfig.teams.some(item => item.name === "Browser Team Updated" && item.carIds.includes(car.id)), "team membership update"); await navigate("race_setup", "raceWizardStepForm"); await click("event-manage-" + race.id); await click("team-edit-" + team.id); assert.equal(await evaluate('document.getElementById("teamEditForm").elements.namedItem("teamName").value'), "Browser Team Updated"); assert.ok(await evaluate(`document.querySelector('#teamEditForm [name="teamCarIds"][value="${car.id}"]').checked`)); await click("teamEditCancel"); await fill("sessionForm", { name: "Editable Practice", type: "open_practice", durationMin: "5" }); await submit("sessionForm"); await waitFor(async () => (await savedState()).sessions.some(session => session.name === "Editable Practice"), "practice create"); const session = (await savedState()).sessions.find(item => item.name === "Editable Practice"); await click("session-edit-" + session.id); await fill("sessionEditForm", { name: "Edited Team Session", type: "team_race", durationMin: "45", followUpSec: "30" }); await submit("sessionEditForm"); await waitFor(async () => (await savedState()).sessions.some(item => item.id === session.id && item.type === "team_race" && item.durationMin === 45 && item.followUpSec === 30), "session edit type and duration"); await fill("raceFormatForm", { minLapSec: "30", maxLapSec: "120" }); await submit("raceFormatForm"); await waitFor(async () => (await raceState()).raceConfig.minLapMs === 30000 && (await raceState()).raceConfig.maxLapMs === 120000, "lap limits saved"); await navigate("race_setup", "raceWizardStepForm"); await click("event-manage-" + race.id); await click("session-edit-" + session.id); assert.equal(await evaluate('document.getElementById("sessionEditForm").elements.namedItem("type").value'), "team_race"); await click("sessionEditCancel"); assert.equal(await evaluate('document.getElementById("raceFormatForm").elements.namedItem("minLapSec").value'), "30.0"); await click("team-delete-" + team.id); await waitFor(async () => !(await raceState()).raceConfig.teams.some(item => item.id === team.id), "team deletion"); console.log("PASS race wizard/edit/reload, team create/member-edit/delete, session type/duration and lap limits"); }