-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test(electron): add test cases for electron tabs (#7635)
fix AF-1000
- Loading branch information
Showing
8 changed files
with
215 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
import { test } from '@affine-test/kit/electron'; | ||
import { | ||
clickNewPageButton, | ||
createLinkedPage, | ||
} from '@affine-test/kit/utils/page-logic'; | ||
import { expect, type Page } from '@playwright/test'; | ||
|
||
test('create new tab', async ({ views }) => { | ||
let page = await views.getActive(); | ||
|
||
await page.getByTestId('add-tab-view-button').click(); | ||
await expect(page.getByTestId('workbench-tab')).toHaveCount(2); | ||
// new tab title should be All docs | ||
await expect(page.getByTestId('workbench-tab').nth(1)).toContainText( | ||
'All docs' | ||
); | ||
page = await views.getActive(); | ||
// page content should be at all docs page | ||
await expect(page.getByTestId('virtualized-page-list')).toContainText( | ||
'All Docs' | ||
); | ||
}); | ||
|
||
test('can switch & close tab by clicking', async ({ page }) => { | ||
await page.getByTestId('add-tab-view-button').click(); | ||
|
||
await expect(page.getByTestId('workbench-tab').nth(1)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
// switch to the previous tab by clicking on it | ||
await page.getByTestId('workbench-tab').nth(0).click(); | ||
await expect(page.getByTestId('workbench-tab').nth(0)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
|
||
// switch to the next tab by clicking on it | ||
await page.getByTestId('workbench-tab').nth(1).click(); | ||
await expect(page.getByTestId('workbench-tab').nth(1)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
|
||
// close the current tab | ||
await page | ||
.getByTestId('workbench-tab') | ||
.nth(1) | ||
.getByTestId('close-tab-button') | ||
.click(); | ||
|
||
// the first tab should be active | ||
await expect(page.getByTestId('workbench-tab').nth(0)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
}); | ||
|
||
test('can switch tab by CTRL+number', async ({ page }) => { | ||
test.fixme(); // the shortcut can be only captured by the main process | ||
await page.keyboard.down('ControlOrMeta+T'); | ||
await expect(page.getByTestId('workbench-tab')).toHaveCount(2); | ||
await expect(page.getByTestId('workbench-tab').nth(1)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
// switch to the previous tab by pressing CTRL+1 | ||
await page.locator('body').press('ControlOrMeta+1'); | ||
await expect(page.getByTestId('workbench-tab').nth(0)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
// switch to the next tab by pressing CTRL+2 | ||
await page.locator('body').press('ControlOrMeta+2'); | ||
await expect(page.getByTestId('workbench-tab').nth(1)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
}); | ||
|
||
test('Collapse Sidebar', async ({ page }) => { | ||
await page | ||
.locator('[data-testid=app-sidebar-arrow-button-collapse][data-show=true]') | ||
.click(); | ||
const sliderBarArea = page.getByTestId('app-sidebar'); | ||
await expect(sliderBarArea).not.toBeInViewport(); | ||
}); | ||
|
||
test('Expand Sidebar', async ({ page }) => { | ||
await page | ||
.locator('[data-testid=app-sidebar-arrow-button-collapse][data-show=true]') | ||
.click(); | ||
const sliderBarArea = page.getByTestId('sliderBar-inner'); | ||
await expect(sliderBarArea).not.toBeInViewport(); | ||
|
||
await page | ||
.locator('[data-testid=app-sidebar-arrow-button-expand][data-show=true]') | ||
.click(); | ||
await expect(sliderBarArea).toBeInViewport(); | ||
}); | ||
|
||
test('tab title will change when navigating', async ({ page }) => { | ||
await expect(page.getByTestId('workbench-tab')).toContainText( | ||
'Write, Draw, Plan all at Once' | ||
); | ||
|
||
// create new page | ||
await clickNewPageButton(page); | ||
await expect(page.getByTestId('workbench-tab')).toContainText('Untitled'); | ||
|
||
// go to all page | ||
await page.getByTestId('all-pages').click(); | ||
await expect(page.getByTestId('workbench-tab')).toContainText('All docs'); | ||
|
||
// go to today's journal | ||
await page.getByTestId('slider-bar-journals-button').click(); | ||
await expect(page.locator('.doc-title-container')).toContainText('Today'); | ||
const dateString = await page | ||
.locator('.doc-title-container > span:first-of-type') | ||
.textContent(); | ||
|
||
if (dateString) { | ||
await expect(page.getByTestId('workbench-tab')).toContainText(dateString); | ||
} | ||
}); | ||
|
||
// temporary way to enable split view | ||
async function enableSplitView(page: Page) { | ||
await page.evaluate(() => { | ||
const settingKey = 'affine-settings'; | ||
window.localStorage.setItem( | ||
settingKey, | ||
JSON.stringify({ | ||
clientBorder: false, | ||
fullWidthLayout: false, | ||
windowFrameStyle: 'frameless', | ||
fontStyle: 'Serif', | ||
dateFormat: 'MM/dd/YYYY', | ||
startWeekOnMonday: false, | ||
enableBlurBackground: true, | ||
enableNoisyBackground: true, | ||
autoCheckUpdate: true, | ||
autoDownloadUpdate: true, | ||
enableMultiView: true, | ||
editorFlags: {}, | ||
}) | ||
); | ||
}); | ||
await page.reload(); | ||
} | ||
|
||
test('open split view', async ({ page }) => { | ||
await enableSplitView(page); | ||
await clickNewPageButton(page); | ||
await page.waitForTimeout(500); | ||
await page.keyboard.press('Enter'); | ||
await createLinkedPage(page, 'hi from another page'); | ||
await page | ||
.locator('.affine-reference-title:has-text("hi from another page")') | ||
.click({ | ||
modifiers: ['ControlOrMeta', 'Alt'], | ||
}); | ||
await expect(page.locator('.doc-title-container')).toHaveCount(2); | ||
|
||
// check tab title | ||
await expect(page.getByTestId('split-view-label')).toHaveCount(2); | ||
await expect(page.getByTestId('split-view-label').nth(0)).toContainText( | ||
'Untitled' | ||
); | ||
await expect(page.getByTestId('split-view-label').nth(1)).toContainText( | ||
'hi from another page' | ||
); | ||
|
||
// the second split view should be active | ||
await expect(page.getByTestId('split-view-label').nth(1)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
|
||
// by clicking the first split view label, the first split view should be active | ||
await page.getByTestId('split-view-label').nth(0).click(); | ||
await expect(page.getByTestId('split-view-label').nth(0)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
await expect(page.getByTestId('split-view-indicator').nth(0)).toHaveAttribute( | ||
'data-active', | ||
'true' | ||
); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters