From 675ec6d66117743fc474876401f3b958d8a1f0f0 Mon Sep 17 00:00:00 2001 From: yasserfaraazkhan Date: Wed, 13 Dec 2023 14:24:16 +0530 Subject: [PATCH] E2E: CI Improvements (#2918) --- .github/workflows/e2e-functional.yml | 38 ++++++++++++----- e2e/modules/environment.js | 4 +- e2e/specs/downloads/downloads_manager.test.js | 6 +-- e2e/specs/menu_bar/history_menu.test.js | 10 ++--- package-lock.json | 41 ++++++++++--------- package.json | 2 +- 6 files changed, 57 insertions(+), 44 deletions(-) diff --git a/.github/workflows/e2e-functional.yml b/.github/workflows/e2e-functional.yml index d0c0dd1f..88051b58 100644 --- a/.github/workflows/e2e-functional.yml +++ b/.github/workflows/e2e-functional.yml @@ -13,7 +13,9 @@ env: BRANCH: ${{ github.ref }} BUILD_SUFFIX: 'desktop-pr' JIRA_PROJECT_KEY: 'MM' - MM_TEST_SERVER_URL: "https://mattermost-pr-23996.test.mattermost.cloud/" + MM_TEST_SERVER_URL: ${{ secrets.MM_DESKTOP_E2E_SERVER_URL }} + MM_TEST_USER_NAME: ${{ secrets.MM_DESKTOP_E2E_USER_NAME }} + MM_TEST_PASSWORD: ${{ secrets.MM_DESKTOP_E2E_USER_CREDENTIALS }} PULL_REQUEST_BASE_URL: "https://github.com/mattermost/desktop/pull/" TYPE: ${{ github.event_name == 'pull_request' && 'PR' || '' }} ZEPHYR_ENVIRONMENT_NAME: 'Desktop app' @@ -21,6 +23,7 @@ env: TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_DESKTOP_E2E_TEST_CYCLE_LINK_PREFIX }} AWS_ACCESS_KEY_ID: ${{ secrets.MM_DESKTOP_E2E_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_DESKTOP_E2E_AWS_SECRET_ACCESS_KEY }} + AWS_REGION: "us-east-1" WEBHOOK_URL: ${{ secrets.MM_DESKTOP_E2E_WEBHOOK_URL }} ZEPHYR_API_KEY: ${{ secrets.MM_DESKTOP_E2E_ZEPHYR_API_KEY }} @@ -76,17 +79,10 @@ jobs: Xvfb $DISPLAY -screen 0 1024x768x24 > /dev/null 2>&1 & npm run test:e2e || true # making job pass even if the tests fail due to flakyness npm run test:e2e:send-report - - - name: Remove "Run Desktop E2E Tests" label - if: always() - uses: actions-ecosystem/action-remove-labels@v1 - with: - labels: | - Run Desktop E2E Tests e2e-macos: if: ${{ github.event.label.name == 'Run Desktop E2E Tests' }} - runs-on: macos-12 + runs-on: macos-13 steps: - name: ci/checkout-repo uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 @@ -102,13 +98,21 @@ jobs: with: go-version: '1.20' + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.x + - name: ci/install-dependencies env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: | - brew install yq jq '.mac.target=["zip"]' electron-builder.json | jq '.mac.gatekeeperAssess=false' > /tmp/electron-builder.json && cp /tmp/electron-builder.json . npm ci + npm install -g node-gyp + npm i robotjs + npm i -D electron-rebuild + npx electron-rebuild -f -t prod,optional,dev -w robotjs - name: Set Environment Variables run: | @@ -138,7 +142,7 @@ jobs: e2e-windows: if: ${{ github.event.label.name == 'Run Desktop E2E Tests' }} - runs-on: windows-latest + runs-on: windows-2022 steps: - name: ci/checkout-repo uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 @@ -171,6 +175,7 @@ jobs: node-gyp install --devdir="C:\Users\runneradmin\.electron-gyp" --target=$(jq -r .devDependencies.electron package.json) --dist-url="https://electronjs.org/headers" node-gyp install --devdir="C:\Users\runneradmin\.electron-gyp" --target=$(jq -r .devDependencies.electron package.json) --dist-url="https://electronjs.org/headers" --arch arm64 node-gyp install --devdir="C:\Users\runneradmin\.electron-gyp" --target=$(jq -r .devDependencies.electron package.json) --dist-url="https://electronjs.org/headers" --arch ia32 + npm ci --openssl_fips='' - name: Set Environment Variables shell: bash @@ -199,3 +204,14 @@ jobs: npm run test:e2e || true npm run test:e2e:send-report shell: bash + + e2e-remove-label: + needs: [e2e-linux, e2e-macos, e2e-windows] + if: ${{ github.event.label.name == 'Run Desktop E2E Tests' }} && ${{ always() }} + runs-on: ubuntu-latest + steps: + - name: Remove "Run Desktop E2E Tests" label + uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: | + Run Desktop E2E Tests diff --git a/e2e/modules/environment.js b/e2e/modules/environment.js index a2654f63..869577f7 100644 --- a/e2e/modules/environment.js +++ b/e2e/modules/environment.js @@ -252,8 +252,8 @@ module.exports = { await window.waitForSelector('#input_password-input'); await window.waitForSelector('#saveSetting'); - await window.type('#input_loginId', 'sysadmin'); - await window.type('#input_password-input', 'Sys@dmin123'); + await window.type('#input_loginId', process.env.MM_TEST_USER_NAME); + await window.type('#input_password-input', process.env.MM_TEST_PASSWORD); await window.click('#saveSetting'); }, diff --git a/e2e/specs/downloads/downloads_manager.test.js b/e2e/specs/downloads/downloads_manager.test.js index ddb3a447..b50a78b7 100644 --- a/e2e/specs/downloads/downloads_manager.test.js +++ b/e2e/specs/downloads/downloads_manager.test.js @@ -74,11 +74,7 @@ describe('downloads/downloads_manager', function desc() { }); it('MM-22239 should open downloads dropdown when a download starts', async () => { - await firstServer.locator('#file-attachment-link', {hasText: filename}).click(); - await asyncSleep(1000); - await Promise.all([ - firstServer.locator(`div[role="dialog"] a[download="${filename}"]`).click(), // Triggers the download. - ]); + await firstServer.locator(`a[download="${filename}"]`).click(); await asyncSleep(1000); (await env.downloadsDropdownIsOpen(this.app)).should.equal(true); }); diff --git a/e2e/specs/menu_bar/history_menu.test.js b/e2e/specs/menu_bar/history_menu.test.js index 0ab21881..cd1023b3 100644 --- a/e2e/specs/menu_bar/history_menu.test.js +++ b/e2e/specs/menu_bar/history_menu.test.js @@ -34,16 +34,14 @@ describe('history_menu', function desc() { await loadingScreen.waitForSelector('.LoadingScreen', {state: 'hidden'}); const firstServer = this.serverMap[`${config.teams[0].name}___TAB_MESSAGING`].win; await env.loginToMattermost(firstServer); - await firstServer.waitForSelector('#sidebarItem_suscipit-4'); - - // click on sint channel - await firstServer.click('#sidebarItem_suscipit-4'); - + await firstServer.waitForSelector('#sidebarItem_off-topic'); + // click on Off topic channel + await firstServer.click('#sidebarItem_off-topic'); // click on town square channel await firstServer.click('#sidebarItem_town-square'); await firstServer.locator('[aria-label="Back"]').click(); let channelHeaderText = await firstServer.$eval('#channelHeaderTitle', (el) => el.firstChild.innerHTML); - channelHeaderText.should.equal('sint'); + channelHeaderText.should.equal('Off-Topic'); await firstServer.locator('[aria-label="Forward"]').click(); channelHeaderText = await firstServer.$eval('#channelHeaderTitle', (el) => el.firstChild.innerHTML); channelHeaderText.should.equal('Town Square'); diff --git a/package-lock.json b/package-lock.json index b38655ed..c7c43d9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,7 @@ "node-jq": "2.3.4", "node-loader": "2.0.0", "npm-run-all": "4.1.5", - "playwright": "1.28.1", + "playwright": "1.40.0", "pretty-bytes": "6.0.0", "ps-node": "^0.1.6", "react": "16.14.0", @@ -29998,31 +29998,33 @@ } }, "node_modules/playwright": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.28.1.tgz", - "integrity": "sha512-92Sz6XBlfHlb9tK5UCDzIFAuIkHHpemA9zwUaqvo+w7sFMSmVMGmvKcbptof/eJObq63PGnMhM75x7qxhTR78Q==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.0.tgz", + "integrity": "sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==", "dev": true, - "hasInstallScript": true, "dependencies": { - "playwright-core": "1.28.1" + "playwright-core": "1.40.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.1.tgz", - "integrity": "sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.0.tgz", + "integrity": "sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==", "dev": true, "bin": { - "playwright": "cli.js" + "playwright-core": "cli.js" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/plist": { @@ -59844,18 +59846,19 @@ } }, "playwright": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.28.1.tgz", - "integrity": "sha512-92Sz6XBlfHlb9tK5UCDzIFAuIkHHpemA9zwUaqvo+w7sFMSmVMGmvKcbptof/eJObq63PGnMhM75x7qxhTR78Q==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.0.tgz", + "integrity": "sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==", "dev": true, "requires": { - "playwright-core": "1.28.1" + "fsevents": "2.3.2", + "playwright-core": "1.40.0" } }, "playwright-core": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.1.tgz", - "integrity": "sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.0.tgz", + "integrity": "sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==", "dev": true }, "plist": { diff --git a/package.json b/package.json index 4a29e955..18635e54 100644 --- a/package.json +++ b/package.json @@ -205,7 +205,7 @@ "node-jq": "2.3.4", "node-loader": "2.0.0", "npm-run-all": "4.1.5", - "playwright": "1.28.1", + "playwright": "1.40.0", "pretty-bytes": "6.0.0", "ps-node": "^0.1.6", "react": "16.14.0",