diff --git a/apps/web/src/layouts/index.tsx b/apps/web/src/layouts/index.tsx index bd684ee5f2..5526c6bb7b 100644 --- a/apps/web/src/layouts/index.tsx +++ b/apps/web/src/layouts/index.tsx @@ -28,9 +28,15 @@ import { useRouterTitle } from '../hooks/use-router-title'; import { useWorkspaces } from '../hooks/use-workspaces'; import { WorkspacePlugins } from '../plugins'; import { ModalProvider } from '../providers/ModalProvider'; +import type { RemWorkspace } from '../shared'; import { pathGenerator, publicPathGenerator } from '../shared'; import { StyledPage, StyledToolWrapper, StyledWrapper } from './styles'; +declare global { + // eslint-disable-next-line no-var + var currentWorkspace: RemWorkspace; +} + const QuickSearchModal = dynamic( () => import('../components/pure/quick-search-modal') ); @@ -94,9 +100,15 @@ export const WorkspaceLayoutInner: React.FC = ({ const workspaces = useWorkspaces(); useEffect(() => { - console.log(workspaces); + logger.info('workspaces: ', workspaces); }, [workspaces]); + useEffect(() => { + if (currentWorkspace) { + globalThis.currentWorkspace = currentWorkspace; + } + }, [currentWorkspace]); + useEffect(() => { const providers = workspaces.flatMap(workspace => workspace.providers.filter(provider => provider.background) diff --git a/tests/libs/utils.ts b/tests/libs/utils.ts index df83c07eac..2deac2690a 100644 --- a/tests/libs/utils.ts +++ b/tests/libs/utils.ts @@ -1,7 +1,9 @@ import type { Page } from '@playwright/test'; -import userA from '../fixtures/userA.json'; -import userB from '../fixtures/userB.json'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const userA = require('../fixtures/userA.json'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const userB = require('../fixtures/userB.json'); export async function createFakeUser() { try { diff --git a/tests/libs/workspace-logic.ts b/tests/libs/workspace.ts similarity index 64% rename from tests/libs/workspace-logic.ts rename to tests/libs/workspace.ts index 34a88839f1..31f504a438 100644 --- a/tests/libs/workspace-logic.ts +++ b/tests/libs/workspace.ts @@ -1,4 +1,6 @@ import type { Page } from '@playwright/test'; +import { expect } from '@playwright/test'; + interface CreateWorkspaceParams { name: string; } @@ -20,3 +22,12 @@ export async function createWorkspace( // click create button return page.getByRole('button', { name: 'Create' }).click(); } + +export async function assertCurrentWorkspaceFlavour( + flavour: 'affine' | 'local', + page: Page +) { + // @ts-expect-error type globalThis.currentWorkspace is not defined in playwright context + const actual = await page.evaluate(() => globalThis.currentWorkspace.flavour); + expect(actual).toBe(flavour); +} diff --git a/tests/local-first-avatar.spec.ts b/tests/local-first-avatar.spec.ts index 214d0eff2f..90946a90e0 100644 --- a/tests/local-first-avatar.spec.ts +++ b/tests/local-first-avatar.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); @@ -35,5 +36,6 @@ test.describe('Local first create page', () => { .getAttribute('src'); // out user uploaded avatar expect(blobUrl).toContain('blob:'); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-delete-page.spec.ts b/tests/local-first-delete-page.spec.ts index c6c8cdb4a9..08d461bbe1 100644 --- a/tests/local-first-delete-page.spec.ts +++ b/tests/local-first-delete-page.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); @@ -47,5 +48,6 @@ test.describe('Local first delete page', () => { 'Tips: Click Add to Favorites/Trash and the page will appear here.' ) ).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-delete-workspace.spec.ts b/tests/local-first-delete-workspace.spec.ts index 10250fb1f8..aa6dc47630 100644 --- a/tests/local-first-delete-workspace.spec.ts +++ b/tests/local-first-delete-workspace.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { test } from './libs/playwright'; import { clickSideBarSettingButton } from './libs/sidebar'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); @@ -23,5 +24,6 @@ test.describe('Local first delete workspace', () => { expect(await page.getByTestId('workspace-card').count()).toBe(0); await page.mouse.click(1, 1); expect(await page.getByTestId('workspace-card').count()).toBe(0); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-export-page.spec.ts b/tests/local-first-export-page.spec.ts index b47bc05941..a2d2fe34a8 100644 --- a/tests/local-first-export-page.spec.ts +++ b/tests/local-first-export-page.spec.ts @@ -7,6 +7,7 @@ import { newPage, } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first export page', () => { @@ -65,5 +66,6 @@ test.describe('Local first export page', () => { expect(download.suggestedFilename()).toBe( 'this is a new page to export markdown content.md' ); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-favorite-page.spec.ts b/tests/local-first-favorite-page.spec.ts index 5eaf479dc0..867affe63a 100644 --- a/tests/local-first-favorite-page.spec.ts +++ b/tests/local-first-favorite-page.spec.ts @@ -7,6 +7,7 @@ import { newPage, } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first favorite and cancel favorite page', () => { @@ -24,6 +25,7 @@ test.describe('Local first favorite and cancel favorite page', () => { await clickPageMoreActions(page); const favoriteBtn = page.getByTestId('editor-option-menu-favorite'); await favoriteBtn.click(); + await assertCurrentWorkspaceFlavour('local', page); }); test('Cancel favorite', async ({ page }) => { await newPage(page); @@ -66,5 +68,6 @@ test.describe('Local first favorite and cancel favorite page', () => { 'Tips: Click Add to Favorites/Trash and the page will appear here.' ) ).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-favorites-items.spec.ts b/tests/local-first-favorites-items.spec.ts index b32ec3c84d..126aa46514 100644 --- a/tests/local-first-favorites-items.spec.ts +++ b/tests/local-first-favorites-items.spec.ts @@ -7,6 +7,7 @@ import { newPage, } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first favorite items ui', () => { @@ -59,5 +60,6 @@ test.describe('Local first favorite items ui', () => { .getByText('Click Add to Favorites and the page will appear here.') .isVisible() ).toBe(true); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-new-page.spec.ts b/tests/local-first-new-page.spec.ts index 332349f6f9..e086ad5c57 100644 --- a/tests/local-first-new-page.spec.ts +++ b/tests/local-first-new-page.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('local first new page', () => { @@ -11,6 +12,7 @@ test.describe('local first new page', () => { await newPage(page); const newPageId = page.url().split('/').reverse()[0]; expect(newPageId).not.toBe(originPageId); + await assertCurrentWorkspaceFlavour('local', page); }); test('click btn bew page and find it in all pages', async ({ page }) => { @@ -20,5 +22,6 @@ test.describe('local first new page', () => { await page.getByRole('link', { name: 'All pages' }).click(); const cell = page.getByRole('cell', { name: 'this is a new page' }); expect(cell).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-openpage-newtab.spec.ts b/tests/local-first-openpage-newtab.spec.ts index 257a2fb58c..425d132cf7 100644 --- a/tests/local-first-openpage-newtab.spec.ts +++ b/tests/local-first-openpage-newtab.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('local first new page', () => { @@ -26,5 +27,6 @@ test.describe('local first new page', () => { ]); expect(newTabPage.url()).toBe(newPageUrl); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-restore-page.spec.ts b/tests/local-first-restore-page.spec.ts index a8af8570fa..f337b81cfa 100644 --- a/tests/local-first-restore-page.spec.ts +++ b/tests/local-first-restore-page.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first delete page', () => { @@ -47,5 +48,6 @@ test.describe('Local first delete page', () => { name: 'this is a new page to restore', }); expect(restoreCell).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-show-delete-modal.spec.ts b/tests/local-first-show-delete-modal.spec.ts index dac4f46dbb..edd5b0eeb3 100644 --- a/tests/local-first-show-delete-modal.spec.ts +++ b/tests/local-first-show-delete-modal.spec.ts @@ -7,6 +7,7 @@ import { newPage, } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first delete page', () => { @@ -26,6 +27,7 @@ test.describe('Local first delete page', () => { await deleteBtn.click(); const confirmTip = page.getByText('Delete page?'); expect(confirmTip).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); test('New a page ,then go to all pages and show delete modal', async ({ @@ -50,5 +52,6 @@ test.describe('Local first delete page', () => { await deleteBtn.click(); const confirmTip = page.getByText('Delete page?'); expect(confirmTip).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-trash-page.spec.ts b/tests/local-first-trash-page.spec.ts index 54a3245527..b347d0ab1e 100644 --- a/tests/local-first-trash-page.spec.ts +++ b/tests/local-first-trash-page.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { getBlockSuiteEditorTitle, newPage } from './libs/page-logic'; import { test } from './libs/playwright'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); test.describe('Local first trash page', () => { @@ -35,5 +36,6 @@ test.describe('Local first trash page', () => { expect( page.getByRole('cell', { name: 'this is a new page to delete' }) ).not.toBeUndefined(); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/local-first-workspace-list.spec.ts b/tests/local-first-workspace-list.spec.ts index a19f213c94..abac9a4d63 100644 --- a/tests/local-first-workspace-list.spec.ts +++ b/tests/local-first-workspace-list.spec.ts @@ -3,7 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { test } from './libs/playwright'; import { clickSideBarAllPageButton } from './libs/sidebar'; -import { createWorkspace } from './libs/workspace-logic'; +import { createWorkspace } from './libs/workspace'; loadPage(); test.describe('Local first workspace list', () => { diff --git a/tests/local-first-workspace.spec.ts b/tests/local-first-workspace.spec.ts index a6d143f0d6..680a0286dc 100644 --- a/tests/local-first-workspace.spec.ts +++ b/tests/local-first-workspace.spec.ts @@ -3,6 +3,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { test } from './libs/playwright'; import { clickSideBarCurrentWorkspaceBanner } from './libs/sidebar'; +import { assertCurrentWorkspaceFlavour } from './libs/workspace'; loadPage(); @@ -10,6 +11,7 @@ test.describe('Local first default workspace', () => { test('preset workspace name', async ({ page }) => { const workspaceName = page.getByTestId('workspace-name'); expect(await workspaceName.textContent()).toBe('Demo Workspace'); + await assertCurrentWorkspaceFlavour('local', page); }); // test('default workspace avatar', async ({ page }) => { @@ -26,5 +28,6 @@ test.describe('Language switch', () => { await expect(languageMenuButton).toBeVisible(); const actual = await languageMenuButton.innerText(); expect(actual).toEqual('English'); + await assertCurrentWorkspaceFlavour('local', page); }); }); diff --git a/tests/open-affine.spec.ts b/tests/open-affine.spec.ts index 0e690a61b0..bda671f131 100644 --- a/tests/open-affine.spec.ts +++ b/tests/open-affine.spec.ts @@ -2,7 +2,7 @@ import { expect } from '@playwright/test'; import { loadPage } from './libs/load-page'; import { test } from './libs/playwright'; -import { createWorkspace } from './libs/workspace-logic'; +import { createWorkspace } from './libs/workspace'; loadPage(); diff --git a/tests/parallels/affine-workspace.spec.ts b/tests/parallels/affine-workspace.spec.ts index f270e00aa7..4067ab5cf0 100644 --- a/tests/parallels/affine-workspace.spec.ts +++ b/tests/parallels/affine-workspace.spec.ts @@ -1,6 +1,7 @@ import { expect } from '@playwright/test'; -import userA from '../fixtures/userA.json'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const userA = require('../fixtures/userA.json'); import { test } from '../libs/playwright'; import { clickCollaborationPanel } from '../libs/setting'; import { @@ -10,7 +11,10 @@ import { clickSideBarSettingButton, } from '../libs/sidebar'; import { createFakeUser, loginUser, openHomePage } from '../libs/utils'; -import { createWorkspace } from '../libs/workspace-logic'; +import { + assertCurrentWorkspaceFlavour, + createWorkspace, +} from '../libs/workspace'; test.describe('affine workspace', () => { test('should login with user A', async ({ page }) => { @@ -21,6 +25,7 @@ test.describe('affine workspace', () => { const footer = page.locator('[data-testid="workspace-list-modal-footer"]'); expect(await footer.getByText(userA.name).isVisible()).toBe(true); expect(await footer.getByText(userA.email).isVisible()).toBe(true); + await assertCurrentWorkspaceFlavour('local', page); }); test('should enable affine workspace successfully', async ({ page }) => { @@ -43,5 +48,6 @@ test.describe('affine workspace', () => { await page.locator('[data-block-is-title="true"]').type('Hello, world!', { delay: 50, }); + await assertCurrentWorkspaceFlavour('affine', page); }); });