From 3357bea9c72523ab2d3a07cf98f47eb811418e30 Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Wed, 21 Feb 2024 23:47:36 +0100 Subject: [PATCH] Add smoke test for flight fixture (#28350) --- .circleci/config.yml | 50 +++++++++++++++++++ fixtures/flight/.gitignore | 2 + .../flight/__tests__/__e2e__/smoke.test.js | 20 ++++++++ fixtures/flight/package.json | 8 ++- fixtures/flight/playwright.config.js | 31 ++++++++++++ fixtures/flight/yarn.lock | 23 ++++++++- 6 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 fixtures/flight/__tests__/__e2e__/smoke.test.js create mode 100644 fixtures/flight/playwright.config.js diff --git a/.circleci/config.yml b/.circleci/config.yml index a0197b4134cd0..d89631162852b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -236,6 +236,53 @@ jobs: RELEASE_CHANNEL: experimental command: ./scripts/circleci/run_devtools_e2e_tests.js + run_fixtures_flight_tests: + docker: + - image: cimg/openjdk:20.0-node + environment: *environment + steps: + - checkout + - attach_workspace: + at: . + # Fixture copies some built packages from the workroot after install. + # That means dependencies of the built packages are not installed. + # We need to install dependencies of the workroot to fulfill all dependency constraints + - setup_node_modules + - restore_cache: + name: Restore yarn cache of fixture + keys: + - v2-yarn_cache_fixtures_flight-{{ arch }}-{{ checksum "yarn.lock" }} + - run: + name: Install fixture dependencies + working_directory: fixtures/flight + command: | + yarn install --frozen-lockfile --cache-folder ~/.cache/yarn + if [ $? -ne 0 ]; then + yarn install --frozen-lockfile --cache-folder ~/.cache/yarn + fi + - save_cache: + name: Save yarn cache of fixture + key: v2-yarn_cache_fixtures_flight-{{ arch }}-{{ checksum "yarn.lock" }} + paths: + - ~/.cache/yarn + - run: + working_directory: fixtures/flight + name: Playwright install deps + command: | + npx playwright install + sudo npx playwright install-deps + - run: + name: Run tests + working_directory: fixtures/flight + command: yarn test + environment: + # Otherwise the webserver is a blackbox + DEBUG: pw:webserver + - store_artifacts: + path: fixtures/flight/playwright-report + - store_artifacts: + path: fixtures/flight/test-results + run_devtools_tests_for_versions: docker: *docker environment: *environment @@ -516,6 +563,9 @@ workflows: - run_devtools_e2e_tests: requires: - build_devtools_and_process_artifacts + - run_fixtures_flight_tests: + requires: + - yarn_build devtools_regression_tests: unless: << pipeline.parameters.prerelease_commit_sha >> diff --git a/fixtures/flight/.gitignore b/fixtures/flight/.gitignore index 4add43216aee8..79042a7f00900 100644 --- a/fixtures/flight/.gitignore +++ b/fixtures/flight/.gitignore @@ -7,6 +7,8 @@ # testing /coverage +/playwright-report +/test-results # production /build diff --git a/fixtures/flight/__tests__/__e2e__/smoke.test.js b/fixtures/flight/__tests__/__e2e__/smoke.test.js new file mode 100644 index 0000000000000..af889d5de16ad --- /dev/null +++ b/fixtures/flight/__tests__/__e2e__/smoke.test.js @@ -0,0 +1,20 @@ +import {test, expect} from '@playwright/test'; + +test('smoke test', async ({page}) => { + const consoleErrors = []; + page.on('console', msg => { + const type = msg.type(); + if (type === 'warn' || type === 'error') { + consoleErrors.push({type: type, text: msg.text()}); + } + }); + const pageErrors = []; + page.on('pageerror', error => { + pageErrors.push(error.stack); + }); + await page.goto('/'); + await expect(page.locator('h1')).toHaveText('Hello World'); + + await expect(consoleErrors).toEqual([]); + await expect(pageErrors).toEqual([]); +}); diff --git a/fixtures/flight/package.json b/fixtures/flight/package.json index 3d45747782c0d..968f404fcf8fd 100644 --- a/fixtures/flight/package.json +++ b/fixtures/flight/package.json @@ -3,6 +3,9 @@ "type": "module", "version": "0.1.0", "private": true, + "devEngines": { + "node": "20.x || 21.x" + }, "dependencies": { "@babel/core": "^7.16.0", "@babel/plugin-proposal-private-property-in-object": "^7.18.6", @@ -60,6 +63,9 @@ "webpack-hot-middleware": "^2.25.3", "webpack-manifest-plugin": "^4.0.2" }, + "devDependencies": { + "@playwright/test": "^1.41.2" + }, "scripts": { "predev": "cp -r ../../build/oss-experimental/* ./node_modules/", "prebuild": "cp -r ../../build/oss-experimental/* ./node_modules/", @@ -70,7 +76,7 @@ "start:global": "NODE_ENV=production node --experimental-loader ./loader/global.js server/global", "start:region": "NODE_ENV=production node --experimental-loader ./loader/region.js --conditions=react-server server/region", "build": "node scripts/build.js", - "test": "node scripts/test.js --env=jsdom" + "test": "playwright test" }, "browserslist": { "production": [ diff --git a/fixtures/flight/playwright.config.js b/fixtures/flight/playwright.config.js new file mode 100644 index 0000000000000..faecd8219acd4 --- /dev/null +++ b/fixtures/flight/playwright.config.js @@ -0,0 +1,31 @@ +import {defineConfig, devices} from '@playwright/test'; + +const isCI = Boolean(process.env.CI); + +export default defineConfig({ + // relative to this configuration file. + testDir: '__tests__/__e2e__', + fullyParallel: true, + // Fail the build on CI if you accidentally left test.only in the source code. + forbidOnly: !isCI, + retries: isCI ? 2 : 0, + // Opt out of parallel tests on CI. + workers: isCI ? 1 : undefined, + reporter: 'html', + use: { + baseURL: 'http://localhost:3000', + + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: {...devices['Desktop Chrome']}, + }, + ], + webServer: { + command: 'FAST_REFRESH=false yarn dev', + url: 'http://localhost:3000', + reuseExistingServer: !isCI, + }, +}); diff --git a/fixtures/flight/yarn.lock b/fixtures/flight/yarn.lock index f9c7dbb98a7ce..4954b0e89a04c 100644 --- a/fixtures/flight/yarn.lock +++ b/fixtures/flight/yarn.lock @@ -2689,6 +2689,13 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@playwright/test@^1.41.2": + version "1.41.2" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.41.2.tgz#bd9db40177f8fd442e16e14e0389d23751cdfc54" + integrity sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg== + dependencies: + playwright "1.41.2" + "@pmmmwh/react-refresh-webpack-plugin@0.5.7": version "0.5.7" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz#58f8217ba70069cc6a73f5d7e05e85b458c150e2" @@ -4885,7 +4892,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@2.3.2, fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -6644,6 +6651,20 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +playwright-core@1.41.2: + version "1.41.2" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.41.2.tgz#db22372c708926c697acc261f0ef8406606802d9" + integrity sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA== + +playwright@1.41.2: + version "1.41.2" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.41.2.tgz#4e760b1c79f33d9129a8c65cc27953be6dd35042" + integrity sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A== + dependencies: + playwright-core "1.41.2" + optionalDependencies: + fsevents "2.3.2" + postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741"