mirror of
https://github.com/DustinBrett/daedalOS.git
synced 2025-12-06 00:20:05 +01:00
202 lines
5.9 KiB
TypeScript
202 lines
5.9 KiB
TypeScript
import { test } from "@playwright/test";
|
|
import {
|
|
CLOCK_MENU_ITEMS,
|
|
START_BUTTON_MENU_ITEMS,
|
|
TASKBAR_ENTRIES_MENU_ITEMS,
|
|
TASKBAR_ENTRY_MENU_ITEMS,
|
|
TEST_APP_ICON,
|
|
TEST_APP_TITLE,
|
|
WEBGPU_HEADLESS_NOT_SUPPORTED_BROWSERS,
|
|
} from "e2e/constants";
|
|
import {
|
|
calendarIsVisible,
|
|
captureConsoleLogs,
|
|
clickClock,
|
|
clickContextMenuEntry,
|
|
clickStartButton,
|
|
clickTaskbar,
|
|
clickTaskbarEntry,
|
|
clockCanvasIsHidden,
|
|
clockCanvasMaybeIsVisible,
|
|
clockTextIsVisible,
|
|
contextMenuEntryIsVisible,
|
|
contextMenuHasCount,
|
|
contextMenuIsVisible,
|
|
disableOffscreenCanvas,
|
|
disableWallpaper,
|
|
fileExplorerEntriesAreVisible,
|
|
hoverOnTaskbarEntry,
|
|
loadApp,
|
|
loadTestApp,
|
|
sheepIsVisible,
|
|
startButtonIsVisible,
|
|
taskbarEntriesAreVisible,
|
|
taskbarEntryHasIcon,
|
|
taskbarEntryHasTooltip,
|
|
taskbarEntryIsHidden,
|
|
taskbarEntryIsVisible,
|
|
taskbarEntryPeekImageIsVisible,
|
|
taskbarEntryPeekIsHidden,
|
|
taskbarIsVisible,
|
|
windowIsMaximized,
|
|
windowIsOpaque,
|
|
windowIsTransparent,
|
|
} from "e2e/functions";
|
|
|
|
test.beforeEach(captureConsoleLogs());
|
|
test.beforeEach(disableWallpaper);
|
|
|
|
test.describe("elements", () => {
|
|
test.beforeEach(loadApp());
|
|
test.beforeEach(taskbarIsVisible);
|
|
|
|
test.describe("has start button", () => {
|
|
test.beforeEach(startButtonIsVisible);
|
|
|
|
test("can spawn sheep", async ({ page }) => {
|
|
await page.keyboard.down("Control");
|
|
await page.keyboard.down("Shift");
|
|
|
|
await clickStartButton({ page });
|
|
await sheepIsVisible({ page });
|
|
});
|
|
|
|
test("has context menu", async ({ page }) => {
|
|
await clickStartButton({ page }, true);
|
|
await contextMenuIsVisible({ page });
|
|
await contextMenuHasCount(START_BUTTON_MENU_ITEMS.length, { page });
|
|
|
|
for (const label of START_BUTTON_MENU_ITEMS) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await contextMenuEntryIsVisible(label, { page });
|
|
}
|
|
});
|
|
});
|
|
|
|
test.describe("has clock", () => {
|
|
test("via canvas", clockCanvasMaybeIsVisible);
|
|
|
|
test("via text", async ({ page }) => {
|
|
await disableOffscreenCanvas({ page });
|
|
await page.reload();
|
|
|
|
await clockTextIsVisible({ page });
|
|
await clockCanvasIsHidden({ page });
|
|
});
|
|
|
|
test("can spawn sheep", async ({ page }) => {
|
|
await clickClock({ page }, 7);
|
|
await sheepIsVisible({ page });
|
|
});
|
|
|
|
test("has calendar", async ({ page }) => {
|
|
await clickClock({ page });
|
|
await calendarIsVisible({ page });
|
|
});
|
|
|
|
test("has context menu", async ({ page }) => {
|
|
await clickClock({ page }, 1, true);
|
|
await contextMenuIsVisible({ page });
|
|
await contextMenuHasCount(CLOCK_MENU_ITEMS.length, { page });
|
|
|
|
for (const label of CLOCK_MENU_ITEMS) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await contextMenuEntryIsVisible(label, { page });
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
test.describe("entries", () => {
|
|
test.beforeEach(loadTestApp);
|
|
test.beforeEach(taskbarIsVisible);
|
|
test.beforeEach(taskbarEntriesAreVisible);
|
|
test.beforeEach(fileExplorerEntriesAreVisible);
|
|
|
|
test.describe("has entry", () => {
|
|
test.beforeEach(async ({ page }) =>
|
|
taskbarEntryIsVisible(TEST_APP_TITLE, { page })
|
|
);
|
|
|
|
test("has icon", async ({ page }) =>
|
|
taskbarEntryHasIcon(TEST_APP_TITLE, TEST_APP_ICON, { page }));
|
|
|
|
test("has tooltip", async ({ page }) =>
|
|
taskbarEntryHasTooltip(TEST_APP_TITLE, TEST_APP_TITLE, { page }));
|
|
|
|
test.describe("has context menu", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await clickTaskbarEntry(TEST_APP_TITLE, { page }, true);
|
|
await contextMenuIsVisible({ page });
|
|
});
|
|
|
|
test("has items", async ({ page }) => {
|
|
await contextMenuHasCount(TASKBAR_ENTRY_MENU_ITEMS.length, { page });
|
|
|
|
for (const label of TASKBAR_ENTRY_MENU_ITEMS) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await contextMenuEntryIsVisible(label, { page });
|
|
}
|
|
});
|
|
|
|
test("can close", async ({ page }) => {
|
|
await clickContextMenuEntry(/^Close$/, { page });
|
|
await taskbarEntryIsHidden(TEST_APP_TITLE, { page });
|
|
});
|
|
|
|
test("can minimize & restore", async ({ page }) => {
|
|
await windowIsOpaque({ page });
|
|
await clickContextMenuEntry(/^Minimize$/, { page });
|
|
await windowIsTransparent({ page });
|
|
|
|
await clickTaskbarEntry(TEST_APP_TITLE, { page }, true);
|
|
await clickContextMenuEntry(/^Restore$/, { page });
|
|
await windowIsOpaque({ page });
|
|
});
|
|
|
|
test("can maximize & restore", async ({ page }) => {
|
|
await clickContextMenuEntry(/^Maximize$/, { page });
|
|
await windowIsMaximized({ page });
|
|
|
|
await clickTaskbarEntry(TEST_APP_TITLE, { page }, true);
|
|
await clickContextMenuEntry(/^Restore$/, { page });
|
|
await windowIsMaximized({ page }, false);
|
|
});
|
|
});
|
|
|
|
test("can minimize & restore", async ({ page }) => {
|
|
await windowIsOpaque({ page });
|
|
await clickTaskbarEntry(TEST_APP_TITLE, { page });
|
|
await windowIsTransparent({ page });
|
|
await clickTaskbarEntry(TEST_APP_TITLE, { page });
|
|
await windowIsOpaque({ page });
|
|
});
|
|
|
|
test("has peek image", async ({ page }) => {
|
|
await taskbarEntryPeekIsHidden({ page });
|
|
await hoverOnTaskbarEntry(TEST_APP_TITLE, { page });
|
|
await taskbarEntryPeekImageIsVisible({ page });
|
|
});
|
|
});
|
|
|
|
test.describe("has context menu", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await clickTaskbar({ page }, true);
|
|
await contextMenuIsVisible({ page });
|
|
});
|
|
|
|
test("has items", async ({ browserName, page }) => {
|
|
const entries = TASKBAR_ENTRIES_MENU_ITEMS(
|
|
!WEBGPU_HEADLESS_NOT_SUPPORTED_BROWSERS.has(browserName)
|
|
);
|
|
|
|
await contextMenuHasCount(entries.length, { page });
|
|
|
|
for (const label of entries) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await contextMenuEntryIsVisible(label, { page });
|
|
}
|
|
});
|
|
});
|
|
});
|