88 lines
5.9 KiB
JavaScript
88 lines
5.9 KiB
JavaScript
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");
|
|
}
|