mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-09-24 14:55:37 +00:00
120 lines
5.5 KiB
TypeScript
120 lines
5.5 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import { installDesktopBridge } from "./bridge";
|
|
test("editor loads video, switches tools and edits export options", async ({ page }) => {
|
|
test.setTimeout(120000);
|
|
const errors: string[] = [];
|
|
page.on("pageerror", (e) => {
|
|
errors.push(e.message);
|
|
});
|
|
await installDesktopBridge(page);
|
|
await page.goto("/?windowType=editor");
|
|
await expect(page.getByRole("navigation", { name: "Editor tools" })).toBeVisible({
|
|
timeout: 20000,
|
|
});
|
|
await expect(page.getByRole("slider", { name: "Blur", exact: true })).toBeVisible();
|
|
await expect
|
|
.poll(() =>
|
|
page
|
|
.locator("video")
|
|
.evaluateAll((videos) =>
|
|
videos.some((video) => (video as HTMLVideoElement).readyState >= 2),
|
|
),
|
|
)
|
|
.toBe(true);
|
|
await page.screenshot({
|
|
path: "test-results/editor-scene-light.png",
|
|
fullPage: true,
|
|
animations: "disabled",
|
|
});
|
|
const inspectorWidth = (await page.locator("aside").boundingBox())?.width;
|
|
await page.getByRole("row", { name: "Color", exact: true }).click();
|
|
await expect(page.getByRole("button", { name: "Custom color", exact: true })).toBeVisible();
|
|
await page.getByRole("button", { name: "Custom color", exact: true }).click();
|
|
await expect(page.getByRole("dialog", { name: "Custom color", exact: true })).toBeVisible();
|
|
await page.keyboard.press("Escape");
|
|
await page.getByRole("radio", { name: "Cursor", exact: true }).click();
|
|
await page.getByRole("radio", { name: "Webcam", exact: true }).click();
|
|
await page.getByRole("radio", { name: "Captions", exact: true }).click();
|
|
await page.getByRole("radio", { name: "Settings", exact: true }).click();
|
|
await expect(page.getByText("Appearance", { exact: true })).toBeVisible();
|
|
await page.getByRole("row", { name: "Dark", exact: true }).click();
|
|
await expect(page.locator("html")).toHaveClass(/dark/);
|
|
await page.screenshot({
|
|
path: "test-results/editor-dark.png",
|
|
fullPage: true,
|
|
animations: "disabled",
|
|
});
|
|
await page.getByRole("row", { name: "Light", exact: true }).click();
|
|
await expect(page.locator("html")).not.toHaveClass(/dark/);
|
|
await page.getByRole("radio", { name: "Scene", exact: true }).click();
|
|
await page.getByRole("button", { name: "Export", exact: true }).click();
|
|
await expect(page.getByRole("grid", { name: "Format", exact: true })).toBeVisible();
|
|
await page.getByRole("row", { name: "GIF", exact: true }).click();
|
|
await expect(page.getByRole("switch", { name: "Loop", exact: false })).toBeVisible();
|
|
await page.screenshot({
|
|
path: "test-results/editor-export-light.png",
|
|
fullPage: true,
|
|
animations: "disabled",
|
|
});
|
|
await page.keyboard.press("Escape");
|
|
await expect(page.getByRole("grid", { name: "Format", exact: true })).toHaveCount(0);
|
|
await page.screenshot({
|
|
path: "test-results/editor-light.png",
|
|
fullPage: true,
|
|
animations: "disabled",
|
|
});
|
|
await page.getByRole("button", { name: "Home", exact: true }).click();
|
|
await expect(
|
|
page.getByRole("dialog", { name: "Projects dashboard", exact: true }),
|
|
).toBeVisible();
|
|
await page.keyboard.press("Escape");
|
|
await page.getByRole("button", { name: "Crop Video", exact: true }).click();
|
|
await expect(page.getByRole("dialog", { name: "Crop Video", exact: true })).toBeVisible();
|
|
await page.getByRole("button", { name: "Done", exact: true }).click();
|
|
await page.getByRole("button", { name: "16:9", exact: true }).click();
|
|
await page.getByRole("menuitem", { name: "1:1", exact: true }).click();
|
|
await expect(page.getByRole("button", { name: "1:1", exact: true })).toBeVisible();
|
|
await expect(page.getByRole("button", { name: "Open presets", exact: true })).toHaveCount(0);
|
|
await page.getByRole("button", { name: "Add Layer", exact: true }).click();
|
|
await page.getByRole("menuitem", { name: "Annotation", exact: true }).click();
|
|
await expect
|
|
.poll(async () => (await page.locator("aside").boundingBox())?.width)
|
|
.toBe(inspectorWidth);
|
|
const bold = page.getByRole("button", { name: "Toggle bold", exact: false });
|
|
await expect(bold).toHaveAttribute("aria-pressed", "true");
|
|
await bold.click();
|
|
await expect(bold).toHaveAttribute("aria-pressed", "false");
|
|
await page.getByRole("button", { name: "Undo", exact: true }).click();
|
|
await expect(bold).toHaveAttribute("aria-pressed", "true");
|
|
const annotationBlock = page.locator('[data-variant="annotation"] .timeline-block');
|
|
await expect(annotationBlock).toBeVisible();
|
|
const blockBounds = (await annotationBlock.boundingBox())!;
|
|
expect(blockBounds.y + blockBounds.height).toBeLessThan(page.viewportSize()!.height - 12);
|
|
await page.screenshot({
|
|
path: "test-results/editor-annotation.png",
|
|
fullPage: true,
|
|
animations: "disabled",
|
|
});
|
|
expect(errors).toEqual([]);
|
|
});
|
|
test("recorder opens device and source popovers", async ({ page }) => {
|
|
const errors: string[] = [];
|
|
page.on("pageerror", (e) => {
|
|
errors.push(e.message);
|
|
});
|
|
await installDesktopBridge(page);
|
|
await page.goto("/?windowType=hud-overlay");
|
|
await expect(page.getByRole("button", { name: "Record", exact: true })).toBeVisible();
|
|
await page.getByRole("button", { name: "Countdown delay", exact: false }).click();
|
|
await page.getByRole("button", { name: "5s", exact: true }).click();
|
|
await expect(page.getByRole("dialog")).toHaveCount(0);
|
|
await page.getByRole("button", { name: "Built-in Display", exact: true }).click();
|
|
await expect(page.getByRole("dialog")).toBeVisible();
|
|
await page.keyboard.press("Escape");
|
|
await expect(page.getByRole("button", { name: "More", exact: true })).toHaveCount(0);
|
|
await page.getByRole("button", { name: "Home", exact: true }).click();
|
|
await expect(page.locator("html")).toHaveAttribute("data-dashboard-opened", "true");
|
|
|
|
expect(errors).toEqual([]);
|
|
});
|