85 lines
3.1 KiB
JavaScript
85 lines
3.1 KiB
JavaScript
import { test, expect } from '@playwright/test';
|
|
import { waitForAppReady, setupConsoleCollector, resetMockState } from './helpers.js';
|
|
|
|
test.describe('E: Plugin Manager layout', () => {
|
|
let consoleCollector;
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
consoleCollector = setupConsoleCollector(page);
|
|
await resetMockState(page);
|
|
await page.goto('/');
|
|
await waitForAppReady(page);
|
|
});
|
|
|
|
test.afterEach(async () => {
|
|
consoleCollector.assertNoErrors();
|
|
});
|
|
|
|
test('plugin list scrolls through the global main scroll surface and stays responsive', async ({ page }) => {
|
|
await page.evaluate(() => window.__wailsMock.addSyntheticPlugins(18));
|
|
await page.locator('button.reload-btn').click();
|
|
await expect(page.locator('.plugin-card')).toHaveCount(21, { timeout: 10000 });
|
|
|
|
const manager = page.locator('.plugin-manager');
|
|
const scrollSurface = page.locator('.content.scroll-surface');
|
|
await expect(manager).toBeVisible();
|
|
await expect(scrollSurface).toBeVisible();
|
|
|
|
const desktopMetrics = await scrollSurface.evaluate((node) => ({
|
|
clientHeight: node.clientHeight,
|
|
scrollHeight: node.scrollHeight,
|
|
overflowY: getComputedStyle(node).overflowY,
|
|
}));
|
|
expect(desktopMetrics.overflowY).toBe('auto');
|
|
expect(desktopMetrics.scrollHeight).toBeGreaterThan(desktopMetrics.clientHeight);
|
|
|
|
const scrolledTop = await scrollSurface.evaluate((node) => {
|
|
node.scrollTop = node.scrollHeight;
|
|
return node.scrollTop;
|
|
});
|
|
expect(scrolledTop).toBeGreaterThan(0);
|
|
|
|
await page.setViewportSize({ width: 720, height: 640 });
|
|
await expect(manager).toBeVisible();
|
|
|
|
const narrowMetrics = await scrollSurface.evaluate((node) => ({
|
|
clientWidth: node.clientWidth,
|
|
scrollWidth: node.scrollWidth,
|
|
scrollTop: node.scrollTop,
|
|
}));
|
|
expect(narrowMetrics.scrollWidth).toBeLessThanOrEqual(narrowMetrics.clientWidth + 1);
|
|
expect(narrowMetrics.scrollTop).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('platform-test buttons use the global button contract', async ({ page }) => {
|
|
await page.locator('.sidebar .plugin-item').filter({ hasText: 'Platform Test' }).click();
|
|
|
|
const saveButton = page.locator('.pt-save-setting');
|
|
await expect(saveButton).toBeVisible({ timeout: 10000 });
|
|
await expect(saveButton).toHaveClass(/btn-primary/);
|
|
|
|
const buttonStyle = await saveButton.evaluate((node) => {
|
|
const style = getComputedStyle(node);
|
|
return {
|
|
display: style.display,
|
|
backgroundColor: style.backgroundColor,
|
|
borderRadius: style.borderRadius,
|
|
};
|
|
});
|
|
expect(buttonStyle.display).toBe('inline-flex');
|
|
expect(buttonStyle.backgroundColor).not.toBe('rgba(0, 0, 0, 0)');
|
|
expect(buttonStyle.borderRadius).toBe('6px');
|
|
});
|
|
|
|
test('workspace selection keeps exactly one active node', async ({ page }) => {
|
|
const selected = page.locator('.wt-node.selected .wt-label');
|
|
await expect(selected).toHaveCount(1);
|
|
await expect(selected).toHaveText('Alpha Case');
|
|
|
|
await page.locator('.wt-label').filter({ hasText: 'Beta Case' }).click();
|
|
|
|
await expect(selected).toHaveCount(1);
|
|
await expect(selected).toHaveText('Beta Case');
|
|
});
|
|
});
|