Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
171b41f
Refine event editor stages and optional import dialog
BASIC-BIT Oct 12, 2026
d91074a
Restore circular event wizard markers
BASIC-BIT Oct 12, 2026
a819687
Select event communities from directory search
BASIC-BIT Oct 12, 2026
184a407
test(events): stabilize owned artwork lineup verification
BASIC-BIT Oct 13, 2026
30a2bb9
feat(events): combine contributor date and time controls
BASIC-BIT Oct 13, 2026
6a7cdfe
fix(events): clear remembered occurrences on timezone suggestions
BASIC-BIT Oct 13, 2026
58721fe
feat(events): support optional staff end times in event wizard
BASIC-BIT Oct 13, 2026
9648a9c
fix(events): show shifted staff end before save
BASIC-BIT Oct 13, 2026
15f6464
fix(events): preserve exact staff start in end preview
BASIC-BIT Oct 13, 2026
a9cb305
Keep keyboard-active community visible in search results
BASIC-BIT Oct 13, 2026
4006083
Fix no-end event runtime discovery
BASIC-BIT Oct 13, 2026
524db21
Fix contributor intake timing acceptance and wizard validation
BASIC-BIT Oct 13, 2026
5e783d6
Bound discovery candidates and remove duplicate scan
BASIC-BIT Oct 13, 2026
8152e14
Align search fixtures and deduplicate world candidates
BASIC-BIT Oct 13, 2026
77146a3
Rank live event schedules before search limits
BASIC-BIT Oct 13, 2026
18802f3
feat: add private event timezone preference
BASIC-BIT Oct 13, 2026
54e7072
feat: simplify event timezone selection
BASIC-BIT Oct 13, 2026
b81a654
fix: reveal missing event timezone selection
BASIC-BIT Oct 13, 2026
4060db3
feat: add lineup timing edits and fixed event ends
BASIC-BIT Oct 13, 2026
70e678a
feat: make event lineups editable slot by slot
BASIC-BIT Oct 13, 2026
b0e9dfd
fix: preserve lineup identities and exact offset durations
BASIC-BIT Oct 13, 2026
2a9394b
feat: finish event scheduling review experience
BASIC-BIT Oct 13, 2026
3ac6a98
fix(events): preserve lineup confirmation and provenance
BASIC-BIT Oct 13, 2026
392b7e5
fix(events): preserve scheduling anchors and duration commits
BASIC-BIT Oct 13, 2026
d5b376f
fix(events): require an edit before committing duration
BASIC-BIT Oct 13, 2026
679b87a
fix(events): allow clearing an individual slot end
BASIC-BIT Oct 13, 2026
c779488
Merge origin/main into event scheduling
BASIC-BIT Oct 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 10 additions & 3 deletions apps/web/e2e/event-contribution.flow.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ for (const mode of ["draft", "correction"] as const) {
await expect(navigation.getByRole("button")).toHaveText(["Details", "Lineup", "Review"]);
if (mode === "correction") await expect(page.getByRole("button", { name: "Import poster or text", exact: true })).toHaveCount(0);
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("UTC");
await page.getByRole("option", { name: /^UTC / }).click();
await page.getByRole("option", { name: /^UTC(?: |$)/ }).click();
await page.getByLabel("Starts", { exact: true }).fill("2027-07-15T23:00");
await page.getByText("Add end time", { exact: true }).click();
const endInput = page.getByLabel("Ends (optional)", { exact: true });
Expand Down Expand Up @@ -57,6 +58,7 @@ for (const mode of ["draft", "correction"] as const) {
const navigation = page.getByRole("navigation", { name: "Event editor" });
await navigation.getByRole("button", { name: "Details", exact: true }).click();
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("America/New_York");
await page.getByRole("option").first().click();
await page.getByLabel("Starts", { exact: true }).fill("2026-11-01T01:15");
Expand Down Expand Up @@ -162,14 +164,17 @@ test("owner timezone keyboard search stores a region, not EST @flow @fixture", a
await page.goto("/playwright/event-editor");
await page.getByRole("navigation", { name: "Event editor" }).getByRole("button", { name: "Details", exact: true }).click();
await page.getByLabel("Starts", { exact: true }).fill("2026-07-15T20:00");
await page.getByRole("button", { name: "Time zone", exact: true }).click();
const timezone = page.getByRole("combobox", { name: "Time zone" });
await timezone.fill("EST");
await expect(page.getByRole("option", { name: /New York.*UTC-04:00/ })).toBeVisible();
await expect(page.getByRole("option", { name: /Eastern.*UTC-04:00/ })).toBeVisible();
await timezone.press("ArrowDown");
await timezone.press("Enter");
await expect(page.locator('input[name="timezone"]')).toHaveValue("America/New_York");
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await timezone.fill("not a zone");
await expect(page.locator('input[name="timezone"]')).toHaveValue("");
await expect(page.locator('input[name="timezone"]')).toHaveValue("America/New_York");
await timezone.press("Escape");
});

test("direct intake auth preserves community and draft @flow @fixture", async ({ page }) => {
Expand Down Expand Up @@ -211,6 +216,7 @@ test("intake draft resumes, date-only publishes directly, and has no mobile over
test("ambiguous start requires occurrence and gap is refused @flow @fixture", async ({ page }) => {
await page.goto("/playwright/event-intake");
await page.getByLabel("Event title").fill("Autumn gathering");
await page.getByRole("button", { name: "Time zone", exact: true }).click();
const timezone = page.getByRole("combobox", { name: "Time zone" });
await timezone.fill("EST"); await timezone.press("ArrowDown"); await timezone.press("Enter");
await page.getByLabel("Starts", { exact: true }).fill("2026-11-01T01:30");
Expand Down Expand Up @@ -406,6 +412,7 @@ test("combined controls preserve dates, reversible TBA and overnight times @flow
await page.getByLabel("Starts", { exact: true }).fill("2026-10-10T23:00");
await page.getByText("Add end time", { exact: true }).click();
await page.getByLabel("Ends (optional)", { exact: true }).fill("2026-10-11T02:00");
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone" }).fill("UTC");
await page.getByRole("combobox", { name: "Time zone" }).press("ArrowDown");
await page.getByRole("combobox", { name: "Time zone" }).press("Enter");
Expand Down
17 changes: 8 additions & 9 deletions apps/web/e2e/event-editor-end.flow.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,25 +81,25 @@ test("staff edit applies an occurrence-only end change @fixture", async ({ page
expect(payload.endAt).toBe(Date.UTC(2026, 10, 1, 5, 45));
});

test("staff edit applies an occurrence-only start change @fixture", async ({ page }) => {
test("staff edit applies an occurrence-only start change while keeping the stored end fixed @fixture", async ({ page }) => {
await editWithRepeatedEnd(page);
await page.getByLabel("Start occurrence").selectOption("later");
await expect(page.getByLabel("Ends (optional)", { exact: true })).toHaveValue("2026-11-01T02:45");
await expect(page.getByText("Nov 1, 7:45 AM", { exact: false })).toBeVisible();
await expect(page.getByLabel("Ends (optional)", { exact: true })).toHaveValue("2026-11-01T01:45");
await expect(page.getByText("Nov 1, 6:45 AM", { exact: false })).toBeVisible();
const payload = await saveEdit(page);
expect(payload.startAt).toBe(Date.UTC(2026, 10, 1, 6, 15));
expect(payload.endAt).toBe(storedEnd + 60 * 60_000);
expect(payload.endAt).toBe(storedEnd);
});

test("staff edit reflects a shifted end in the earlier repeated hour @fixture", async ({ page }) => {
test("staff edit keeps the later repeated-hour end when the start moves earlier @fixture", async ({ page }) => {
await editWithRepeatedEnd(page);
await page.getByLabel("Starts", { exact: true }).fill("2026-11-01T00:15");
await expect(page.getByLabel("Ends (optional)", { exact: true })).toHaveValue("2026-11-01T01:45");
await expect(page.getByLabel("End occurrence")).toHaveValue("earlier");
await expect(page.getByText("Nov 1, 5:45 AM", { exact: false })).toBeVisible();
await expect(page.getByLabel("End occurrence")).toHaveValue("later");
await expect(page.getByText("Nov 1, 6:45 AM", { exact: false })).toBeVisible();
const payload = await saveEdit(page);
expect(payload.startAt).toBe(Date.UTC(2026, 10, 1, 4, 15));
expect(payload.endAt).toBe(Date.UTC(2026, 10, 1, 5, 45));
expect(payload.endAt).toBe(storedEnd);
});

test("staff edit clears its authored end explicitly @fixture", async ({ page }) => {
Expand Down Expand Up @@ -130,7 +130,6 @@ test("staff create omits an unknown end without slots @fixture", async ({ page }
await page.getByRole("navigation", { name: "Event editor" }).getByRole("button", { name: "Details" }).click();
await page.getByLabel("Starts", { exact: true }).fill("2027-10-15T20:00");
await page.getByRole("navigation", { name: "Event editor" }).getByRole("button", { name: "Lineup" }).click();
await page.getByLabel("Slots", { exact: true }).fill("0");
await page.getByRole("navigation", { name: "Event editor" }).getByRole("button", { name: "Review" }).click();
await page.getByRole("button", { name: "Save draft", exact: true }).click();
await expect.poll(() => page.evaluate(() => localStorage.getItem("event-lineup-fixture-v1-submission"))).not.toBeNull();
Expand Down
42 changes: 37 additions & 5 deletions apps/web/e2e/event-editor.snapshots.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ async function setTheme(page: Page, value: "light" | "dark") {
}

async function capture(page: Page, path: string) {
expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
expect(await page.evaluate(() => document.documentElement.scrollWidth <= document.documentElement.clientWidth)).toBe(true);
await page.evaluate(() => scrollTo(0, 0));
await page.screenshot({ path, animations: "disabled", caret: "hide", fullPage: true });
await page.screenshot({ path, animations: "disabled", caret: "hide", fullPage: true, scale: "css" });
await expect(page).toHaveScreenshot(path.split("/").pop()!.split("\\").pop()!, { animations: "disabled", caret: "hide", fullPage: true, scale: "css", maxDiffPixelRatio: 0.002, threshold: 0.2 });
}

for (const editor of [
Expand All @@ -36,7 +37,7 @@ for (const editor of [
for (const step of ["Details", "Lineup", "Review"]) {
await page.getByRole("navigation", { name: "Event editor" }).getByRole("button", { name: step }).click();
await waitForVisualReady(page);
expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
expect(await page.evaluate(() => document.documentElement.scrollWidth <= document.documentElement.clientWidth)).toBe(true);
await expect(page).toHaveScreenshot(`${editor.name}-${step.toLowerCase()}.png`, {
animations: "disabled", caret: "hide", fullPage: true,
maxDiffPixelRatio: 0.002, scale: "css", threshold: 0.2,
Expand All @@ -45,13 +46,13 @@ for (const editor of [
});
}

for (const mode of ["create", "resumed", "correction", "staff-edit"] as const) {
for (const mode of ["create", "resumed", "correction", "staff-create", "staff-edit"] as const) {
for (const color of ["light", "dark"] as const) {
test(`${mode} ${color} editor evidence @snapshot @fixture`, async ({ page }, info) => {
if (mode === "resumed") await page.addInitScript(() => sessionStorage.setItem("fixture-source-draft", JSON.stringify({
version: 1, fields: { communitySlug: "afterglow", title: "Resumed night", eventDate: "2027-10-15", timezone: "UTC", start: { time: "20:00" }, end: { time: "23:00" }, venueLabel: "Harbor" },
})));
const path = mode === "staff-edit" ? "/playwright/event-editor/edit"
const path = mode === "staff-create" ? "/playwright/event-editor" : mode === "staff-edit" ? "/playwright/event-editor/edit"
: mode === "correction" ? "/playwright/event-intake?revision=correction"
: mode === "resumed" ? "/playwright/event-intake?source=text"
: "/playwright/event-intake?revision=draft";
Expand Down Expand Up @@ -88,6 +89,7 @@ test("import dialog, failure, and DST states @snapshot @fixture", async ({ page
await capture(page, info.outputPath("import-error.png"));
await dialog.getByRole("button", { name: "Close" }).click();
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone" }).fill("America/New_York");
await page.getByRole("option").first().click();
await page.getByLabel("Starts", { exact: true }).fill("2027-03-14T02:30");
Expand All @@ -100,3 +102,33 @@ test("import dialog, failure, and DST states @snapshot @fixture", async ({ page
await expect(page.getByLabel("Ends (optional) occurrence")).toBeVisible();
await capture(page, info.outputPath("dst-repeat-and-end.png"));
});

for (const color of ["light", "dark"] as const) test(`scheduling states ${color} @snapshot @fixture`, async ({ page }, info) => {
await page.addInitScript(() => sessionStorage.setItem("event-intake-fixture", JSON.stringify({ communitySlug: "playwright-afterglow-social", title: "Harbor night", eventDate: "2027-10-15", timezone: "UTC", start: { time: "20:00" }, end: { time: "21:00" } })));
await page.goto("/playwright/event-intake"); await setTheme(page, color);
await expect(page.getByRole("button", { name: "Time zone", exact: true })).toHaveText(/^UTC\s*▾$/);
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await expect(page.getByRole("option").first()).not.toContainText(" · UTC");
await expect(page.getByRole("combobox", { name: "Time zone" })).toBeFocused();
const popoverBackground = await page.getByRole("listbox").evaluate(list => getComputedStyle(list.parentElement!).backgroundColor);
expect(popoverBackground).not.toContain("rgba");
await capture(page, info.outputPath(`schedule-${color}-timezone.png`));
await page.getByRole("combobox", { name: "Time zone" }).press("Escape");
const nav = page.getByRole("navigation", { name: "Event editor" });
await nav.getByRole("button", { name: "Lineup", exact: true }).click();
await capture(page, info.outputPath(`schedule-${color}-setup.png`));
await page.getByRole("button", { name: "Generate", exact: true }).click();
for (const [index, row] of (await page.locator('[data-lineup-row]').all()).entries()) await row.getByRole("textbox", { name: "Performer", exact: true }).fill(["Aurora", "Neon Harbor", "Lumen", "Closing session"][index]);
await capture(page, info.outputPath(`schedule-${color}-lineup-conflict.png`));
await page.getByRole("button", { name: "Add slot at position 2", exact: true }).click();
await page.getByLabel("Slot duration", { exact: true }).fill("15");
await capture(page, info.outputPath(`schedule-${color}-insertion.png`));
await page.getByRole("button", { name: "Insert slot", exact: true }).click();
await page.getByRole("button", { name: "Reset lineup", exact: true }).click();
await capture(page, info.outputPath(`schedule-${color}-reset.png`));
await page.getByRole("dialog").getByRole("button", { name: "Cancel", exact: true }).click();
await nav.getByRole("button", { name: "Review", exact: true }).click();
await capture(page, info.outputPath(`schedule-${color}-review-conflict.png`));
await page.getByRole("button", { name: "Set event end to lineup end", exact: true }).click();
await capture(page, info.outputPath(`schedule-${color}-review.png`));
});
13 changes: 10 additions & 3 deletions apps/web/e2e/event-intake-source.flow.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ test("lineup uses local dates across midnight and matched avatars @flow @fixture
await page.getByRole("textbox", { name: "Performer", exact: true }).fill("Aurora");
await page.getByLabel("Person profile", { exact: true }).fill("aurora");
await expect(page.getByRole("img", { name: "Aurora", exact: true }).locator("img")).toHaveAttribute("src", "/test-media/event-poster.png");
await page.locator('[data-lineup-row]').first().locator("summary").click();
await page.getByLabel("Slot 1 start", { exact: true }).fill("2027-10-16T00:30");
await expect(page.getByText("Day offset", { exact: true })).toHaveCount(0);
await page.screenshot({ path: info.outputPath("lineup.png"), fullPage: true, animations: "disabled" });
Expand Down Expand Up @@ -237,6 +238,7 @@ test("review routes missing fields back to details and repeated times require oc
await page.getByLabel("Time TBA", { exact: true }).check();
await page.getByLabel("Starts", { exact: true }).fill("2027-11-07");
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("America/New_York");
await page.getByRole("option").first().click();
await page.getByLabel("Starts", { exact: true }).fill("2027-11-07T01:30");
Expand Down Expand Up @@ -390,12 +392,14 @@ test("publish focuses invalid lineup time and hidden native field @flow @fixture
await page.getByLabel("Time TBA", { exact: true }).check();
await page.getByLabel("Starts", { exact: true }).fill("2027-03-14");
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("America/New_York");
await page.getByRole("option").first().click();
await page.getByLabel("Starts", { exact: true }).fill("2027-03-14T01:00");
await step(page, "Lineup");
await page.getByRole("button", { name: "Add performer" }).click();
await page.getByRole("textbox", { name: "Performer", exact: true }).fill("Guest DJ");
await page.locator('[data-lineup-row]').first().locator("summary").click();
await page.getByLabel("Slot 1 start", { exact: true }).fill("2027-03-14T02:30");
await step(page, "Review");
await page.getByRole("button", { name: "Publish event", exact: true }).click();
Expand Down Expand Up @@ -529,6 +533,7 @@ test("Time TBA restores only surviving lineup keys and reload discards the backu
await page.getByLabel("Time TBA", { exact: true }).check();
await step(page, "Lineup");
await page.getByRole("button", { name: "Remove slot", exact: true }).first().click();
await page.getByRole("button", { name: "Add slot at position 2", exact: true }).click();
await page.getByRole("button", { name: "Add performer", exact: true }).click();
await page.getByRole("textbox", { name: "Performer", exact: true }).nth(1).fill("New performer");
await step(page, "Details");
Expand Down Expand Up @@ -569,6 +574,7 @@ test.describe("event timezone differs from browser timezone", () => {
await page.getByLabel("Starts", { exact: true }).fill("2026-11-01T01:45");
await expect(page.getByLabel("Starts occurrence", { exact: true })).toHaveValue("");
await page.getByLabel("Starts occurrence", { exact: true }).selectOption("later");
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("UTC");
await page.getByRole("option", { name: /^UTC / }).click();
await expect(page.getByLabel("Starts occurrence", { exact: true })).toHaveCount(0);
Expand All @@ -593,10 +599,11 @@ for (const method of ["suggestion", "picker"] as const) {
await page.getByLabel("Time TBA", { exact: true }).check();
if (method === "suggestion") await page.getByRole("button", { name: "Accept Time zone", exact: true }).click();
else {
await page.getByRole("button", { name: "Time zone", exact: true }).click();
await page.getByRole("combobox", { name: "Time zone", exact: true }).fill("America/Chicago");
await page.getByRole("option").first().click();
}
await expect(page.getByRole("combobox", { name: "Time zone", exact: true })).toHaveValue("America/Chicago");
await expect(page.locator('input[name="timezone"]')).toHaveValue("America/Chicago");
await page.getByLabel("Time TBA", { exact: true }).uncheck();
await expect(page.getByLabel("Starts", { exact: true })).toHaveValue("2026-11-01T01:30");
for (const label of ["Starts", "Ends (optional)", "Doors open"]) await expect(page.getByLabel(`${label} occurrence`, { exact: true })).toHaveValue("");
Expand Down Expand Up @@ -625,6 +632,8 @@ const saveTimingDraft = async (page: Page) => {
await expect(page.getByRole("status")).toHaveText("Draft saved");
};
const extractTimingProposal = async (page: Page, eventDate: string | null = "2026-10-11") => {
await openImport(page);
await page.getByRole("textbox", { name: "Source text", exact: true }).fill("October 11 overnight lineup");
await page.evaluate(eventDate => {
const original = window.fetch;
window.fetch = async (input, init) => {
Expand All @@ -636,8 +645,6 @@ const extractTimingProposal = async (page: Page, eventDate: string | null = "202
return original(input, init);
};
}, eventDate);
await openImport(page);
await page.getByRole("textbox", { name: "Source text", exact: true }).fill("October 11 overnight lineup");
await page.getByRole("button", { name: "Extract details", exact: true }).click();
await expect(page.getByRole("dialog")).toHaveCount(0);
};
Expand Down
Loading
Loading