From 9ddcdb8e5037ca415158dd501b0ee0ed341f1064 Mon Sep 17 00:00:00 2001 From: pengx17 Date: Mon, 9 Dec 2024 03:31:05 +0000 Subject: [PATCH] test(core): test case for dragging from bs editor to sidebar (#9057) fix AF-1904 --- tests/affine-local/e2e/drag-page.spec.ts | 37 ++++++++++++++++++++++-- tests/kit/utils/url.ts | 9 ++++-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/tests/affine-local/e2e/drag-page.spec.ts b/tests/affine-local/e2e/drag-page.spec.ts index cff8b6a1a..9f4866015 100644 --- a/tests/affine-local/e2e/drag-page.spec.ts +++ b/tests/affine-local/e2e/drag-page.spec.ts @@ -3,14 +3,15 @@ import { test } from '@affine-test/kit/playwright'; import { openHomePage } from '@affine-test/kit/utils/load-page'; import { clickNewPageButton, + createLinkedPage, dragTo, - getBlockSuiteEditorTitle, waitForEditorLoad, } from '@affine-test/kit/utils/page-logic'; import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar'; import { getCurrentCollectionIdFromUrl, getCurrentDocIdFromUrl, + getDocIdFromUrl, } from '@affine-test/kit/utils/url'; import type { Locator, Page } from '@playwright/test'; import { expect } from '@playwright/test'; @@ -43,8 +44,7 @@ const createCollection = async (page: Page, name: string) => { }; const createPage = async (page: Page, title: string) => { - await clickNewPageButton(page); - await getBlockSuiteEditorTitle(page).fill(title); + await clickNewPageButton(page, title); }; const dragToCollection = async (page: Page, dragItem: Locator) => { @@ -212,3 +212,34 @@ test('items in favourites can be reordered by dragging', async ({ page }) => { page.getByTestId('explorer-favorites').locator('[draggable]').last() ).toHaveText('test collection'); }); + +test('drag a page link in editor to favourites', async ({ page }) => { + await clickNewPageButton(page); + await page.waitForTimeout(500); + await page.keyboard.press('Enter'); + await createLinkedPage(page, 'hi from another page'); + + const pageReference = page.locator('a').filter({ + has: page.locator( + '.affine-reference-title:has-text("hi from another page")' + ), + }); + + const pageLink = await pageReference.evaluate( + el => (el as HTMLAnchorElement).href + ); + + expect(pageLink).toBeTruthy(); + + if (!pageLink) { + return; + } + + const pageId = getDocIdFromUrl(pageLink); + + await dragToFavourites( + page, + page.locator('.affine-reference-title:has-text("hi from another page")'), + pageId + ); +}); diff --git a/tests/kit/utils/url.ts b/tests/kit/utils/url.ts index 89d64f542..c903e15b7 100644 --- a/tests/kit/utils/url.ts +++ b/tests/kit/utils/url.ts @@ -1,7 +1,8 @@ import type { Page } from '@playwright/test'; -export function getCurrentDocIdFromUrl(page: Page) { - const pathname = new URL(page.url()).pathname; +export function getDocIdFromUrl(url: string) { + const pathname = new URL(url).pathname; + const match = pathname.match(/\/workspace\/([^/]+)\/([^/]+)\/?/); if (match && match[2]) { return match[2]; @@ -9,6 +10,10 @@ export function getCurrentDocIdFromUrl(page: Page) { throw new Error('Failed to get doc id from url'); } +export function getCurrentDocIdFromUrl(page: Page) { + return getDocIdFromUrl(page.url()); +} + export function getCurrentCollectionIdFromUrl(page: Page) { const pathname = new URL(page.url()).pathname; const match = pathname.match(/\/workspace\/([^/]+)\/collection\/([^/]+)\/?/);