feat(audio): shareable ?audio= deep-link presets the sound mode
?audio=none|soundtrack|music (and ?vol=0..10) presets the Audio source/volume on load, so a link opens straight into a chosen sound mode — e.g. share …/?audio=music with someone who'd prefer music, …/?audio=soundtrack for the ambience. Invalid values ignored (default Soundtrack stands). +5 e2e (url-params.spec.ts). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import { test, expect, Page } from "@playwright/test";
|
||||
|
||||
// Shareable deep-link: ?audio=none|soundtrack|music presets the Audio source on load
|
||||
// (and ?vol=0..10 the master volume), so a link opens straight into a chosen sound mode.
|
||||
|
||||
async function ready(page: Page) {
|
||||
await page.waitForFunction(() => (window as any).__hefReady === true, null, { timeout: 45_000 });
|
||||
}
|
||||
async function launch(page: Page) {
|
||||
await page.locator("#welcome-launch").click();
|
||||
await page.waitForSelector("#welcome", { state: "detached", timeout: 10_000 });
|
||||
}
|
||||
const srcVal = (page: Page) => page.locator("#audio-source").inputValue();
|
||||
|
||||
test("?audio=music preselects the Music source and survives launch", async ({ page }) => {
|
||||
await page.goto("/?audio=music");
|
||||
await ready(page);
|
||||
expect(await srcVal(page)).toBe("music"); // set at init, before launch
|
||||
await launch(page);
|
||||
expect(await srcVal(page)).toBe("music");
|
||||
});
|
||||
|
||||
test("?audio=soundtrack preselects Soundtrack", async ({ page }) => {
|
||||
await page.goto("/?audio=soundtrack");
|
||||
await ready(page);
|
||||
expect(await srcVal(page)).toBe("soundtrack");
|
||||
});
|
||||
|
||||
test("?audio=none preselects None and disables Volume", async ({ page }) => {
|
||||
await page.goto("/?audio=none");
|
||||
await ready(page);
|
||||
expect(await srcVal(page)).toBe("none");
|
||||
await expect(page.locator("#audio")).toBeDisabled();
|
||||
});
|
||||
|
||||
test("an invalid ?audio value is ignored (stays default Soundtrack)", async ({ page }) => {
|
||||
await page.goto("/?audio=banana");
|
||||
await ready(page);
|
||||
expect(await srcVal(page)).toBe("soundtrack");
|
||||
});
|
||||
|
||||
test("?vol sets the master volume for the shared link", async ({ page }) => {
|
||||
await page.goto("/?audio=music&vol=7");
|
||||
await ready(page);
|
||||
await launch(page);
|
||||
expect(await page.locator("#audio").inputValue()).toBe("7");
|
||||
});
|
||||
Reference in New Issue
Block a user