From c6eefe5eaa760591ed014ab410c316a0c4a85ea5 Mon Sep 17 00:00:00 2001 From: himself65 Date: Thu, 27 Apr 2023 23:44:00 -0500 Subject: [PATCH 1/4] test(electron): theme check --- apps/electron/layers/main/src/main-window.ts | 4 +- apps/electron/tests/basic.spec.ts | 53 ++++++++++++++++++-- tests/kit/playwright.ts | 10 +++- tests/libs/utils.ts | 10 ---- tests/parallels/theme.spec.ts | 3 +- 5 files changed, 61 insertions(+), 19 deletions(-) diff --git a/apps/electron/layers/main/src/main-window.ts b/apps/electron/layers/main/src/main-window.ts index 99ecbd9dd738..7178160f41e7 100644 --- a/apps/electron/layers/main/src/main-window.ts +++ b/apps/electron/layers/main/src/main-window.ts @@ -8,6 +8,8 @@ import { isMacOS } from '../../utils'; const IS_DEV: boolean = process.env.NODE_ENV === 'development' && !process.env.CI; +const DEV_TOOL = process.env.DEV_TOOL === 'true'; + async function createWindow() { logger.info('create window'); const mainWindowState = electronWindowState({ @@ -57,7 +59,7 @@ async function createWindow() { logger.info('main window is ready to show'); - if (IS_DEV) { + if (DEV_TOOL) { browserWindow.webContents.openDevTools(); } }); diff --git a/apps/electron/tests/basic.spec.ts b/apps/electron/tests/basic.spec.ts index 5e42b583e7bc..34fca246b38c 100644 --- a/apps/electron/tests/basic.spec.ts +++ b/apps/electron/tests/basic.spec.ts @@ -1,15 +1,33 @@ import { resolve } from 'node:path'; -import { test } from '@affine-test/kit/playwright'; +import { test, testResultDir } from '@affine-test/kit/playwright'; +import type { Page } from '@playwright/test'; import { expect } from '@playwright/test'; +import type { ElectronApplication } from 'playwright'; import { _electron as electron } from 'playwright'; -test('new page', async () => { - const electronApp = await electron.launch({ +let electronApp: ElectronApplication; +let page: Page; + +test.beforeEach(async () => { + electronApp = await electron.launch({ args: [resolve(__dirname, '..')], executablePath: resolve(__dirname, '../node_modules/.bin/electron'), + colorScheme: 'light', }); - const page = await electronApp.firstWindow(); + page = await electronApp.firstWindow(); + // cleanup page data + await page.evaluate(() => localStorage.clear()); +}); + +test.afterEach(async () => { + // cleanup page data + await page.evaluate(() => localStorage.clear()); + await page.close(); + await electronApp.close(); +}); + +test('new page', async () => { await page.getByTestId('new-page-button').click({ delay: 100, }); @@ -19,5 +37,30 @@ test('new page', async () => { () => globalThis.currentWorkspace.flavour ); expect(flavour).toBe('local'); - await electronApp.close(); +}); + +test('app theme', async () => { + await page.waitForSelector('v-line'); + const root = page.locator('html'); + { + const themeMode = await root.evaluate(element => + element.getAttribute('data-theme') + ); + expect(themeMode).toBe('light'); + } + const prev = await page.screenshot({ + path: resolve(testResultDir, 'affine-light-theme-electron.png'), + }); + await page.getByTestId('change-theme-dark').click(); + await page.waitForTimeout(50); + { + const themeMode = await root.evaluate(element => + element.getAttribute('data-theme') + ); + expect(themeMode).toBe('dark'); + } + const after = await page.screenshot({ + path: resolve(testResultDir, 'affine-dark-theme-electron.png'), + }); + expect(prev).not.toEqual(after); }); diff --git a/tests/kit/playwright.ts b/tests/kit/playwright.ts index 02d2798e1d16..4dc840ca1539 100644 --- a/tests/kit/playwright.ts +++ b/tests/kit/playwright.ts @@ -1,10 +1,18 @@ +import { ok } from 'node:assert'; import crypto from 'node:crypto'; import fs from 'node:fs'; -import path from 'node:path'; +import path, { resolve } from 'node:path'; import process from 'node:process'; import { test as baseTest } from '@playwright/test'; +export const rootDir = resolve(__dirname, '..', '..'); +// assert that the rootDir is the root of the project +// eslint-disable-next-line @typescript-eslint/no-var-requires +ok(require(resolve(rootDir, 'package.json')).name.toLowerCase() === 'affine'); + +export const testResultDir = resolve(rootDir, 'test-results'); + const istanbulTempDir = process.env.ISTANBUL_TEMP_DIR ? path.resolve(process.env.ISTANBUL_TEMP_DIR) : path.join(process.cwd(), '.nyc_output'); diff --git a/tests/libs/utils.ts b/tests/libs/utils.ts index 5f4b10f68658..da48eeb11a2f 100644 --- a/tests/libs/utils.ts +++ b/tests/libs/utils.ts @@ -1,6 +1,3 @@ -import { ok } from 'node:assert'; -import { resolve } from 'node:path'; - import type { PageMeta } from '@blocksuite/store'; import { faker } from '@faker-js/faker'; import type { Page } from '@playwright/test'; @@ -10,13 +7,6 @@ const user1 = require('@affine-test/fixtures/built-in-user1.json'); // eslint-disable-next-line @typescript-eslint/no-var-requires const user2 = require('@affine-test/fixtures/built-in-user2.json'); -export const rootDir = resolve(__dirname, '..', '..'); -// assert that the rootDir is the root of the project -// eslint-disable-next-line @typescript-eslint/no-var-requires -ok(require(resolve(rootDir, 'package.json')).name.toLowerCase() === 'affine'); - -export const testResultDir = resolve(rootDir, 'test-results'); - export async function getBuiltInUser() { return Promise.all([ fetch('http://localhost:3000/api/user/token', { diff --git a/tests/parallels/theme.spec.ts b/tests/parallels/theme.spec.ts index a4029837cb60..c9be3c164284 100644 --- a/tests/parallels/theme.spec.ts +++ b/tests/parallels/theme.spec.ts @@ -1,11 +1,10 @@ import { resolve } from 'node:path'; -import { test } from '@affine-test/kit/playwright'; +import { test, testResultDir } from '@affine-test/kit/playwright'; import { expect } from '@playwright/test'; import { openHomePage } from '../libs/load-page'; import { waitMarkdownImported } from '../libs/page-logic'; -import { testResultDir } from '../libs/utils'; // default could be anything according to the system test('default white', async ({ browser }) => { From 1484807f4a99c3c5197730ee19f1237f8e5d23ca Mon Sep 17 00:00:00 2001 From: himself65 Date: Fri, 28 Apr 2023 01:13:42 -0500 Subject: [PATCH 2/4] fix: dir --- tests/parallels/local-first-setting-page.spec.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/parallels/local-first-setting-page.spec.ts b/tests/parallels/local-first-setting-page.spec.ts index eec736b07d9d..5df4dd7249d8 100644 --- a/tests/parallels/local-first-setting-page.spec.ts +++ b/tests/parallels/local-first-setting-page.spec.ts @@ -1,12 +1,11 @@ import { resolve } from 'node:path'; -import { test } from '@affine-test/kit/playwright'; +import { test, testResultDir } from '@affine-test/kit/playwright'; import { expect } from '@playwright/test'; import { openHomePage } from '../libs/load-page'; import { waitMarkdownImported } from '../libs/page-logic'; import { clickSideBarSettingButton } from '../libs/sidebar'; -import { testResultDir } from '../libs/utils'; test('Should highlight the setting page menu when selected', async ({ page, From 7c5d441e9acde9199ecc567418e7e3feb8189762 Mon Sep 17 00:00:00 2001 From: himself65 Date: Fri, 28 Apr 2023 01:14:35 -0500 Subject: [PATCH 3/4] fix: compare --- apps/electron/tests/basic.spec.ts | 5 ++--- tests/parallels/theme.spec.ts | 7 +++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/electron/tests/basic.spec.ts b/apps/electron/tests/basic.spec.ts index 34fca246b38c..4228c7f56457 100644 --- a/apps/electron/tests/basic.spec.ts +++ b/apps/electron/tests/basic.spec.ts @@ -48,7 +48,7 @@ test('app theme', async () => { ); expect(themeMode).toBe('light'); } - const prev = await page.screenshot({ + await page.screenshot({ path: resolve(testResultDir, 'affine-light-theme-electron.png'), }); await page.getByTestId('change-theme-dark').click(); @@ -59,8 +59,7 @@ test('app theme', async () => { ); expect(themeMode).toBe('dark'); } - const after = await page.screenshot({ + await page.screenshot({ path: resolve(testResultDir, 'affine-dark-theme-electron.png'), }); - expect(prev).not.toEqual(after); }); diff --git a/tests/parallels/theme.spec.ts b/tests/parallels/theme.spec.ts index c9be3c164284..c3a5e8eda828 100644 --- a/tests/parallels/theme.spec.ts +++ b/tests/parallels/theme.spec.ts @@ -6,7 +6,7 @@ import { expect } from '@playwright/test'; import { openHomePage } from '../libs/load-page'; import { waitMarkdownImported } from '../libs/page-logic'; -// default could be anything according to the system +// default could be anything, according to the system test('default white', async ({ browser }) => { const context = await browser.newContext({ colorScheme: 'light', @@ -19,15 +19,14 @@ test('default white', async ({ browser }) => { element.getAttribute('data-theme') ); expect(themeMode).toBe('light'); - const prev = await page.screenshot({ + await page.screenshot({ path: resolve(testResultDir, 'affine-light-theme.png'), }); await page.getByTestId('change-theme-dark').click(); await page.waitForTimeout(50); - const after = await page.screenshot({ + await page.screenshot({ path: resolve(testResultDir, 'affine-dark-theme.png'), }); - expect(prev).not.toEqual(after); }); // test('change theme to dark', async ({ page }) => { From 76b918a60849b61c027785eabe904853e8563ec3 Mon Sep 17 00:00:00 2001 From: himself65 Date: Fri, 28 Apr 2023 01:29:27 -0500 Subject: [PATCH 4/4] fix: test --- apps/electron/tests/basic.spec.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/electron/tests/basic.spec.ts b/apps/electron/tests/basic.spec.ts index 24b88f468d21..9c769b4d5ba5 100644 --- a/apps/electron/tests/basic.spec.ts +++ b/apps/electron/tests/basic.spec.ts @@ -65,11 +65,6 @@ test('app theme', async () => { }); test('affine cloud disabled', async () => { - const electronApp = await electron.launch({ - args: [resolve(__dirname, '..')], - executablePath: resolve(__dirname, '../node_modules/.bin/electron'), - }); - const page = await electronApp.firstWindow(); await page.getByTestId('new-page-button').click({ delay: 100, }); @@ -79,5 +74,4 @@ test('affine cloud disabled', async () => { await page.getByTestId('disable-affine-cloud-modal').waitFor({ state: 'visible', }); - await electronApp.close(); });