From 52d0e52df9fe5b81cb5e5e1d7f6ab9dd135c5da7 Mon Sep 17 00:00:00 2001 From: Kai Hao Date: Tue, 21 Feb 2023 11:51:04 +0800 Subject: [PATCH 1/3] Add typescript-eslint rules with type information --- .eslintrc.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 70926c8a9c541..e08d5476d1896 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -388,7 +388,14 @@ module.exports = { 'test/e2e/**/*.[tj]s', 'packages/e2e-test-utils-playwright/**/*.[tj]s', ], - extends: [ 'plugin:eslint-plugin-playwright/playwright-test' ], + extends: [ + 'plugin:eslint-plugin-playwright/playwright-test', + 'plugin:@typescript-eslint/base', + ], + parserOptions: { + tsconfigRootDir: __dirname, + project: [ './test/e2e/tsconfig.json' ], + }, rules: { '@wordpress/no-global-active-element': 'off', '@wordpress/no-global-get-selection': 'off', @@ -411,6 +418,9 @@ module.exports = { message: 'Prefer page.locator instead.', }, ], + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-misused-promises': 'error', }, }, { From 7e13955ece370b7ef1e33af38cf3bf340d4c5d44 Mon Sep 17 00:00:00 2001 From: Kai Hao Date: Tue, 21 Feb 2023 11:56:18 +0800 Subject: [PATCH 2/3] Fix errors in e2e tests --- test/e2e/specs/editor/blocks/classic.spec.js | 4 ++-- test/e2e/specs/editor/blocks/code.spec.js | 2 +- test/e2e/specs/editor/blocks/gallery.spec.js | 2 +- test/e2e/specs/editor/blocks/image.spec.js | 4 ++-- test/e2e/specs/editor/blocks/list.spec.js | 2 +- test/e2e/specs/editor/plugins/nonce.spec.js | 8 ++++---- .../editor/various/autocomplete-and-mentions.spec.js | 7 +++---- test/e2e/specs/editor/various/copy-cut-paste.spec.js | 6 +++--- test/e2e/specs/editor/various/inserting-blocks.spec.js | 2 +- .../specs/editor/various/toolbar-roving-tabindex.spec.js | 2 +- test/e2e/specs/site-editor/title.spec.js | 8 ++++---- 11 files changed, 23 insertions(+), 24 deletions(-) diff --git a/test/e2e/specs/editor/blocks/classic.spec.js b/test/e2e/specs/editor/blocks/classic.spec.js index 59302b571401f..73691ac3da299 100644 --- a/test/e2e/specs/editor/blocks/classic.spec.js +++ b/test/e2e/specs/editor/blocks/classic.spec.js @@ -110,8 +110,8 @@ test.describe( 'Classic', () => { } ) => { // Based on docs routing diables caching. // See: https://playwright.dev/docs/api/class-page#page-route - await page.route( '**', ( route ) => { - route.continue(); + await page.route( '**', async ( route ) => { + await route.continue(); } ); await editor.insertBlock( { name: 'core/freeform' } ); diff --git a/test/e2e/specs/editor/blocks/code.spec.js b/test/e2e/specs/editor/blocks/code.spec.js index ae62e5c1a1092..1fe91e3966f22 100644 --- a/test/e2e/specs/editor/blocks/code.spec.js +++ b/test/e2e/specs/editor/blocks/code.spec.js @@ -38,7 +38,7 @@ test.describe( 'Code', () => { await editor.insertBlock( { name: 'core/code' } ); // Test to see if HTML and white space is kept. - await pageUtils.setClipboardData( { plainText: '\n\t
' } ); + pageUtils.setClipboardData( { plainText: '\n\t
' } ); await pageUtils.pressKeyWithModifier( 'primary', 'v' ); diff --git a/test/e2e/specs/editor/blocks/gallery.spec.js b/test/e2e/specs/editor/blocks/gallery.spec.js index 3881c31d5b860..68093535b3062 100644 --- a/test/e2e/specs/editor/blocks/gallery.spec.js +++ b/test/e2e/specs/editor/blocks/gallery.spec.js @@ -47,7 +47,7 @@ test.describe( 'Gallery', () => { } ) => { await admin.createNewPost(); - await pageUtils.setClipboardData( { + pageUtils.setClipboardData( { plainText: `[gallery ids="${ uploadedMedia.id }"]`, } ); diff --git a/test/e2e/specs/editor/blocks/image.spec.js b/test/e2e/specs/editor/blocks/image.spec.js index fc435544b21bb..c5cee42cad16c 100644 --- a/test/e2e/specs/editor/blocks/image.spec.js +++ b/test/e2e/specs/editor/blocks/image.spec.js @@ -220,7 +220,7 @@ test.describe( 'Image', () => { // Add caption and navigate to inline toolbar. await editor.clickBlockToolbarButton( 'Add caption' ); await pageUtils.pressKeyWithModifier( 'shift', 'Tab' ); - await expect( + expect( await page.evaluate( () => document.activeElement.getAttribute( 'aria-label' ) ) @@ -234,7 +234,7 @@ test.describe( 'Image', () => { await page.keyboard.press( 'ArrowLeft' ); // Italic to bold. await page.keyboard.press( 'ArrowLeft' ); - await expect( + expect( await page.evaluate( () => document.activeElement.getAttribute( 'aria-label' ) ) diff --git a/test/e2e/specs/editor/blocks/list.spec.js b/test/e2e/specs/editor/blocks/list.spec.js index 505f077918a97..c037cfb663d14 100644 --- a/test/e2e/specs/editor/blocks/list.spec.js +++ b/test/e2e/specs/editor/blocks/list.spec.js @@ -1166,7 +1166,7 @@ test.describe( 'List', () => { await pageUtils.pressKeyWithModifier( 'secondary', 'M' ); // Emulates CTRL+Shift+Alt + M => toggle code editor // Paste empty list block - await pageUtils.setClipboardData( { + pageUtils.setClipboardData( { plainText: '\n\n', } ); diff --git a/test/e2e/specs/editor/plugins/nonce.spec.js b/test/e2e/specs/editor/plugins/nonce.spec.js index d29911b230ea9..b2c249ac968b8 100644 --- a/test/e2e/specs/editor/plugins/nonce.spec.js +++ b/test/e2e/specs/editor/plugins/nonce.spec.js @@ -44,11 +44,11 @@ test.describe( 'Nonce', () => { url.href.startsWith( requestUtils.storageState.rootURL.slice( 0, -1 ) ), - ( route ) => { + async ( route ) => { if ( refreshed ) { - route.continue(); + await route.continue(); } else { - route.fulfill( { + await route.fulfill( { status: 403, contentType: 'application/json; charset=UTF-8', body: JSON.stringify( { @@ -63,7 +63,7 @@ test.describe( 'Nonce', () => { } const saveDraftResponses = []; - page.on( 'response', async ( response ) => { + page.on( 'response', ( response ) => { const request = response.request(); if ( request.method() === 'POST' && diff --git a/test/e2e/specs/editor/various/autocomplete-and-mentions.spec.js b/test/e2e/specs/editor/various/autocomplete-and-mentions.spec.js index 016699ef9236e..e5ad573313f7a 100644 --- a/test/e2e/specs/editor/various/autocomplete-and-mentions.spec.js +++ b/test/e2e/specs/editor/various/autocomplete-and-mentions.spec.js @@ -214,10 +214,9 @@ test.describe( 'Autocomplete', () => { await expect( page.locator( `role=option[name="${ testData.optionText }"i]` ) ).toBeVisible(); - await page; - page.locator( - `role=option[name="${ testData.optionText }"i]` - ).click(); + await page + .locator( `role=option[name="${ testData.optionText }"i]` ) + .click(); await expect .poll( editor.getEditedPostContent ) diff --git a/test/e2e/specs/editor/various/copy-cut-paste.spec.js b/test/e2e/specs/editor/various/copy-cut-paste.spec.js index 4b7fb267f87b7..5936071147e84 100644 --- a/test/e2e/specs/editor/various/copy-cut-paste.spec.js +++ b/test/e2e/specs/editor/various/copy-cut-paste.spec.js @@ -407,7 +407,7 @@ test.describe( 'Copy/cut/paste', () => { // back to default browser behaviour, allowing the browser to insert // unfiltered HTML. When we swap out the post title in the post editor // with the proper block, this test can be removed. - await pageUtils.setClipboardData( { + pageUtils.setClipboardData( { html: 'Hello World', } ); await pageUtils.pressKeyWithModifier( 'primary', 'v' ); @@ -423,7 +423,7 @@ test.describe( 'Copy/cut/paste', () => { } ) => { await page.keyboard.type( 'ab' ); await page.keyboard.press( 'ArrowLeft' ); - await pageUtils.setClipboardData( { + pageUtils.setClipboardData( { html: 'x', } ); await pageUtils.pressKeyWithModifier( 'primary', 'v' ); @@ -439,7 +439,7 @@ test.describe( 'Copy/cut/paste', () => { pageUtils, editor, } ) => { - await pageUtils.setClipboardData( { + pageUtils.setClipboardData( { html: '
x
', } ); await editor.insertBlock( { name: 'core/list' } ); diff --git a/test/e2e/specs/editor/various/inserting-blocks.spec.js b/test/e2e/specs/editor/various/inserting-blocks.spec.js index a0d042c06d6a0..0ddb2b6b59228 100644 --- a/test/e2e/specs/editor/various/inserting-blocks.spec.js +++ b/test/e2e/specs/editor/various/inserting-blocks.spec.js @@ -328,7 +328,7 @@ test.describe( 'insert media from inserter', () => { ); } ); test.afterAll( async ( { requestUtils } ) => { - Promise.all( [ + await Promise.all( [ requestUtils.deleteAllMedia(), requestUtils.deleteAllPosts(), ] ); diff --git a/test/e2e/specs/editor/various/toolbar-roving-tabindex.spec.js b/test/e2e/specs/editor/various/toolbar-roving-tabindex.spec.js index 43de49fef1481..0feb50f1b9233 100644 --- a/test/e2e/specs/editor/various/toolbar-roving-tabindex.spec.js +++ b/test/e2e/specs/editor/various/toolbar-roving-tabindex.spec.js @@ -196,7 +196,7 @@ class ToolbarRovingTabindexUtils { document.activeElement.getAttribute( 'aria-label' ) ); } - await expect( ariaLabel ).toBe( label ); + expect( ariaLabel ).toBe( label ); } async wrapCurrentBlockWithGroup( currentBlockTitle ) { diff --git a/test/e2e/specs/site-editor/title.spec.js b/test/e2e/specs/site-editor/title.spec.js index d235264d3a1a8..e194e90449160 100644 --- a/test/e2e/specs/site-editor/title.spec.js +++ b/test/e2e/specs/site-editor/title.spec.js @@ -23,7 +23,7 @@ test.describe( 'Site editor title', () => { postType: 'wp_template', } ); await editor.canvas.click( 'body' ); - const title = await page.locator( + const title = page.locator( 'role=region[name="Editor top bar"i] >> role=heading[level=1]' ); @@ -41,7 +41,7 @@ test.describe( 'Site editor title', () => { postType: 'wp_template_part', } ); await editor.canvas.click( 'body' ); - const title = await page.locator( + const title = page.locator( 'role=region[name="Editor top bar"i] >> role=heading[level=1]' ); @@ -60,14 +60,14 @@ test.describe( 'Site editor title', () => { await editor.canvas.click( 'body' ); // Select the header template part via list view. await page.click( 'role=button[name="List View"i]' ); - const listView = await page.locator( + const listView = page.locator( 'role=treegrid[name="Block navigation structure"i]' ); await listView.locator( 'role=gridcell >> text="header"' ).click(); await page.click( 'role=button[name="Close List View Sidebar"i]' ); // Evaluate the document settings secondary title. - const secondaryTitle = await page.locator( + const secondaryTitle = page.locator( '.edit-site-document-actions__secondary-item' ); From 5cebb3a606f215477e7bdc051639ccbc56981e4b Mon Sep 17 00:00:00 2001 From: Kai Hao Date: Tue, 21 Feb 2023 13:23:49 +0800 Subject: [PATCH 3/3] Fix lint in e2e-test-utils-playwright --- .eslintrc.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index e08d5476d1896..7f3a716c64735 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -394,7 +394,10 @@ module.exports = { ], parserOptions: { tsconfigRootDir: __dirname, - project: [ './test/e2e/tsconfig.json' ], + project: [ + './test/e2e/tsconfig.json', + './packages/e2e-test-utils-playwright/tsconfig.json', + ], }, rules: { '@wordpress/no-global-active-element': 'off',