fix(mobile): setting item popover cannot be closed (#8910)

fix AF-1798
This commit is contained in:
pengx17
2024-11-25 05:54:48 +00:00
parent b369ee0cca
commit f6eb84a8e0
8 changed files with 96 additions and 27 deletions

View File

@@ -0,0 +1,60 @@
import { test } from '@affine-test/kit/mobile';
import { expect, type Page } from '@playwright/test';
const openSettings = async (page: Page) => {
await page.getByTestId('settings-button').click();
await expect(page.getByRole('dialog')).toBeVisible();
await expect(page.locator('header:has-text("Settings")')).toBeVisible();
};
test('can open settings', async ({ page }) => {
await openSettings(page);
});
test('can change theme', async ({ page }) => {
await openSettings(page);
await page
.getByTestId('setting-row')
.filter({
hasText: 'Color mode',
})
.getByTestId('dropdown-select-trigger')
.click();
await expect(
page.getByRole('dialog').filter({
has: page.getByRole('menuitem', { name: 'Light' }),
})
).toBeVisible();
await page.getByRole('menuitem', { name: 'Dark' }).click();
await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark');
});
test('can close change theme popover by clicking outside', async ({ page }) => {
await openSettings(page);
await page
.getByTestId('setting-row')
.filter({
hasText: 'Color mode',
})
.getByTestId('dropdown-select-trigger')
.click();
const themePopover = page.getByRole('dialog').filter({
has: page.getByRole('menuitem', { name: 'Light' }),
});
await expect(themePopover).toBeVisible();
// get a mouse position that is 10px offset to the top of theme popover
// and click
const mousePosition = await themePopover.boundingBox();
if (!mousePosition) {
throw new Error('theme popover is not visible');
}
await page.mouse.click(mousePosition.x, mousePosition.y - 10);
await expect(themePopover).not.toBeVisible();
});

View File

@@ -10,19 +10,21 @@ const config: PlaywrightTestConfig = {
timeout: process.env.CI ? 60_000 : 30_000,
outputDir: testResultDir,
projects: [
{
name: 'Mobile Safari',
use: {
...devices['iPhone 14'],
},
},
process.env.CI
? {
name: 'Mobile Safari',
use: {
...devices['iPhone 14'],
},
}
: undefined,
{
name: 'Mobile Chrome',
use: {
...devices['Pixel 5'],
},
},
],
].filter(config => config !== undefined),
expect: {
timeout: process.env.CI ? 15_000 : 5_000,
},