From cb8bd4b937518a050d973c09d2a2ecb033812e0c Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Fri, 14 Mar 2025 14:27:56 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(frontend)=20fix=20flakiness=20e2e?= =?UTF-8?q?=20tests=20title=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix multiple states title - wait for stabilize network after create - fix test other chromium browsers - improve grid delete test --- .../apps/e2e/__tests__/app-impress/common.ts | 13 ++++++- .../__tests__/app-impress/doc-grid.spec.ts | 38 +++++-------------- .../app-impress/doc-member-list.spec.ts | 2 +- .../app-impress/doc-visibility.spec.ts | 2 +- 4 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/frontend/apps/e2e/__tests__/app-impress/common.ts b/src/frontend/apps/e2e/__tests__/app-impress/common.ts index 7e445093..23d0abe2 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/common.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/common.ts @@ -51,9 +51,15 @@ export const createDoc = async ( }) .click(); + await page.waitForURL('**/docs/**', { + timeout: 10000, + waitUntil: 'networkidle', + }); + const input = page.getByLabel('doc title input'); await expect(input).toHaveText(''); await input.click(); + await input.fill(randomDocs[i]); await input.blur(); } @@ -63,8 +69,11 @@ export const createDoc = async ( export const verifyDocName = async (page: Page, docName: string) => { const input = page.getByRole('textbox', { name: 'doc title input' }); - await expect(input).toBeVisible(); - await expect(input).toHaveText(docName); + try { + await expect(input).toHaveText(docName); + } catch { + await expect(page.getByRole('heading', { name: docName })).toBeVisible(); + } }; export const addNewMember = async ( diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts index a2691881..179841dc 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-grid.spec.ts @@ -115,25 +115,16 @@ test.describe('Document grid item options', () => { await expect(leftPanelFavorites.getByText(docTitle)).toBeHidden(); }); - test('it deletes the document', async ({ page }) => { - let docs: SmallDoc[] = []; - const response = await page.waitForResponse( - (response) => - response.url().endsWith('documents/?page=1') && - response.status() === 200, - ); - const result = await response.json(); - docs = result.results as SmallDoc[]; + test('it deletes the document', async ({ page, browserName }) => { + const [docTitle] = await createDoc(page, `delete doc`, browserName); - const button = page.getByTestId(`docs-grid-actions-button-${docs[0].id}`); - await expect(button).toBeVisible(); - await button.click(); + await page.goto('/'); - const removeButton = page.getByTestId( - `docs-grid-actions-remove-${docs[0].id}`, - ); - await expect(removeButton).toBeVisible(); - await removeButton.click(); + await expect(page.getByText(docTitle)).toBeVisible(); + const row = await getGridRow(page, docTitle); + await row.getByText(`more_horiz`).click(); + + await page.getByRole('menuitem', { name: 'Remove' }).click(); await expect( page.getByRole('heading', { name: 'Delete a doc' }), @@ -145,20 +136,11 @@ test.describe('Document grid item options', () => { }) .click(); - const refetchResponse = await page.waitForResponse( - (response) => - response.url().endsWith('documents/?page=1') && - response.status() === 200, - ); - - const resultRefetch = await refetchResponse.json(); - expect(resultRefetch.count).toBe(result.count - 1); - await expect(page.getByTestId('main-layout-loader')).toBeHidden(); - await expect( page.getByText('The document has been deleted.'), ).toBeVisible(); - await expect(button).toBeHidden(); + + await expect(page.getByText(docTitle)).toBeHidden(); }); test("it checks if the delete option is disabled if we don't have the destroy capability", async ({ diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts index 7feced8a..649dbc74 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts @@ -131,7 +131,7 @@ test.describe('Document list members', () => { const list = page.getByTestId('doc-share-quick-search'); await expect(list).toBeVisible(); const currentUser = list.getByTestId( - `doc-share-member-row-user@chromium.e2e`, + `doc-share-member-row-user@${browserName}.e2e`, ); const currentUserRole = currentUser.getByLabel('doc-role-dropdown'); await expect(currentUser).toBeVisible(); diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts index 89b47922..a28200b0 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-visibility.spec.ts @@ -154,7 +154,7 @@ test.describe('Doc Visibility: Restricted', () => { // Choose a role const container = page.getByTestId('doc-share-add-member-list'); await container.getByLabel('doc-role-dropdown').click(); - await page.getByLabel('Administrator').click(); + await page.getByLabel('Reader').click(); await page.getByRole('button', { name: 'Invite' }).click();