diff --git a/.github/workflows/main-e2e.yml b/.github/workflows/main-e2e.yml index 6ee570d..4f9e20e 100644 --- a/.github/workflows/main-e2e.yml +++ b/.github/workflows/main-e2e.yml @@ -1,6 +1,5 @@ -# Workflow starts automatically on push or can be triggered manually. -# This is a desirable pattern as it allows for adhoc test runs without a code push -name: main-e2e +name: new-flow-main + on: workflow_dispatch: inputs: @@ -21,22 +20,20 @@ on: - info - warning - debug +env: + CYPRESS_users: ${{ secrets.CYPRESS_USERS }} + CYPRESS_BASE_URL: ${{ secrets.CYPRESS_BASEURL }} + CYPRESS_host: ${{ secrets.CYPRESS_HOST }} + CYPRESS_guid: ${{ secrets.CYPRESS_GUID }} + CYPRESS_ENVIRONMENT: ${{ github.base_ref }} + CYPRESS_loginproxy: ${{ secrets.CYPRESS_LOGINPROXY }} + CYPRESS_siteminder: ${{ secrets.CYPRESS_SITEMINDER }} + CYPRESS_smoketest: ${{inputs.smoketest}} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: - sso-request-tests: + pre-reqs: runs-on: ubuntu-latest - # In order for Cypress to run well, it needs to be fed the needed parameters. - # The below is a mix of Cypress environment variables (All capital) and ones that are needed for this specific set of scripts (Mix of capital and lowercase) - env: - CYPRESS_users: ${{ secrets.CYPRESS_USERS }} - CYPRESS_BASE_URL: ${{ secrets.CYPRESS_BASEURL }} - CYPRESS_host: ${{ secrets.CYPRESS_HOST }} - CYPRESS_guid: ${{ secrets.CYPRESS_GUID }} - CYPRESS_ENVIRONMENT: ${{ github.base_ref }} - CYPRESS_loginproxy: ${{ secrets.CYPRESS_LOGINPROXY }} - CYPRESS_siteminder: ${{ secrets.CYPRESS_SITEMINDER }} - CYPRESS_smoketest: ${{inputs.smoketest}} - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} strategy: fail-fast: false # https://github.com/cypress-io/github-action/issues/48 steps: @@ -44,25 +41,6 @@ jobs: - name: Checkout Target Branch uses: actions/checkout@v4 - # We are cache-ing our node modules to slightly speed up execution in the future. - - name: Cache node modules - id: cache-npm - uses: actions/cache@v4 - env: - cache-name: cache-node-modules - with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} - name: List the state of node modules - continue-on-error: true - run: npm list - - name: Pre-requisites for test run uses: cypress-io/github-action@v6 id: prereq @@ -77,10 +55,18 @@ jobs: spec: | cypress/e2e/**/integration-990-deleteAllIntegrations.cy.ts cypress/e2e/**/team-900-*.cy.ts - browser: chrome + browser: electron # project: ./e2e ci-build-id: ${{ github.event.number }} + smoke-test: + runs-on: ubuntu-latest + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + steps: + # Checkout the PR branch + - name: Checkout Target Branch + uses: actions/checkout@v4 - name: E2E Smoke tests uses: cypress-io/github-action@v6 id: smoke @@ -98,12 +84,42 @@ jobs: # project: ./e2e ci-build-id: ${{ github.event.number }} + - name: Run the reports + run: | + cd testing + npm run report + + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + with: + name: smoke-test-results + path: testing/mochawesome-report/report.html + + - name: Rocket.Chat Notification + uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@master + if: always() && github.ref == 'refs/heads/main' + with: + type: ${{ job.status }} + job_name: '*Smoke Test*' + mention_if: 'failure' + channel: '#sso-ops' + url: ${{ secrets.ROCKETCHAT_WEBHOOK }} + + create-integrations: + runs-on: ubuntu-latest + needs: pre-reqs + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + steps: + # Checkout the PR branch + - name: Checkout Target Branch + uses: actions/checkout@v4 - name: Request Creation tests uses: cypress-io/github-action@v6 id: integration-requests-tests continue-on-error: false with: - summary-title: 'Request Integration tests' + summary-title: 'Create Integration data' wait-on: ${{ secrets.CYPRESS_HOST }} wait-on-timeout: 120 record: true @@ -111,14 +127,149 @@ jobs: working-directory: testing spec: | cypress/e2e/**/integration-010-*.cy.ts + cypress/e2e/**/integration-040-*.cy.ts + browser: chrome + # project: ./e2e + ci-build-id: ${{ github.event.number }} + + - name: Upload resulting integration data + uses: actions/upload-artifact@v4 + with: + name: requestsafter + path: testing/cypress/fixtures/requestsafter.json + compression-level: 0 + + - name: Upload resulting integration roles data + uses: actions/upload-artifact@v4 + with: + name: requestsrolesafter + path: testing/cypress/fixtures/requests-rolesafter.json + compression-level: 0 + + - name: Run the reports + run: | + cd testing + npm run report + + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + with: + name: create-integrations + path: testing/mochawesome-report/report.html + + - name: Rocket.Chat Notification + uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@master + if: always() && github.ref == 'refs/heads/main' + with: + type: ${{ job.status }} + job_name: '*Create Integrations*' + mention_if: 'failure' + channel: '#sso-ops' + url: ${{ secrets.ROCKETCHAT_WEBHOOK }} + + integration-tests: + runs-on: ubuntu-latest + needs: [pre-reqs, create-integrations] + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + steps: + # Checkout the PR branch + - name: Checkout Target Branch + uses: actions/checkout@v4 + + - name: Download requestsafter data + uses: actions/download-artifact@v4 + with: + name: requestsafter + path: testing/cypress/fixtures + + - run: | + cd testing/cypress/fixtures + ls -al + cat requestsafter.json + printenv | sort + + - name: Request Creation tests + uses: cypress-io/github-action@v6 + id: integration-requests-tests + continue-on-error: false + with: + summary-title: 'Request Integration tests' + wait-on: ${{ secrets.CYPRESS_HOST }} + wait-on-timeout: 120 + record: true + install-command: npm ci + working-directory: testing + spec: | cypress/e2e/**/integration-011-*.cy.ts cypress/e2e/**/integration-012-*.cy.ts cypress/e2e/**/integration-013-*.cy.ts browser: chrome # project: ./e2e ci-build-id: ${{ github.event.number }} - env: - NODE_OPTIONS: '--max-old-space-size=4096' + + - name: Install bun + uses: oven-sh/setup-bun@v1 + + - name: Delete Integrations + uses: cypress-io/github-action@v6 + id: delete-integrations + continue-on-error: false + with: + summary-title: 'Integration Deletes' + wait-on: ${{ secrets.CYPRESS_HOST }} + wait-on-timeout: 120 + record: true + install-command: bun install --frozen-lockfile + working-directory: testing + spec: | + cypress/e2e/**/integration-900-deleteIntegration.cy.ts + browser: chrome + # project: ./e2e + ci-build-id: ${{ github.event.number }} + + - name: Run the reports + run: | + cd testing + npm run report + + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + with: + name: integration-test-results + path: testing/mochawesome-report/report.html + + - name: Rocket.Chat Notification + uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@master + if: always() && github.ref == 'refs/heads/main' + with: + type: ${{ job.status }} + job_name: '*Integration Test*' + mention_if: 'failure' + channel: '#sso-ops' + url: ${{ secrets.ROCKETCHAT_WEBHOOK }} + + roles-tests: + runs-on: ubuntu-latest + needs: [pre-reqs, create-integrations] + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + steps: + # Checkout the PR branch + - name: Checkout Target Branch + uses: actions/checkout@v4 + + - name: Download requestrolesafter data + uses: actions/download-artifact@v4 + with: + name: requestsrolesafter + path: testing/cypress/fixtures + + - run: | + cd testing/cypress/fixtures + ls -al + cat requests-rolesafter.json + printenv | sort - name: Roles tests uses: cypress-io/github-action@v6 @@ -132,7 +283,6 @@ jobs: install-command: npm ci working-directory: testing spec: | - cypress/e2e/**/integration-040-*.cy.ts cypress/e2e/**/integration-041-*.cy.ts cypress/e2e/**/integration-042-*.cy.ts cypress/e2e/**/integration-043-*.cy.ts @@ -140,29 +290,57 @@ jobs: browser: chrome # project: ./e2e ci-build-id: ${{ github.event.number }} - env: - NODE_OPTIONS: '--max-old-space-size=4096' - - name: Delete All Integrations + - name: Install bun + uses: oven-sh/setup-bun@v1 + + - name: Delete All Roles Integrations uses: cypress-io/github-action@v6 - id: delete-integrations + id: delete-integrations-roles continue-on-error: false with: - summary-title: 'Integration Deletes' + summary-title: 'Integration Roles Deletes' wait-on: ${{ secrets.CYPRESS_HOST }} wait-on-timeout: 120 record: true - install-command: npm ci + install-command: bun install --frozen-lockfile working-directory: testing spec: | - cypress/e2e/**/integration-990-deleteAllIntegrations.cy.ts - # cypress/e2e/**/integration-900-*.cy.ts - browser: electron + cypress/e2e/**/integration-910-deleteIntegrationRoles.cy.ts + browser: chrome # project: ./e2e ci-build-id: ${{ github.event.number }} - env: - NODE_OPTIONS: '--max-old-space-size=4096' + - name: Run the reports + run: | + cd testing + npm run report + + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + with: + name: roles-test-results + path: testing/mochawesome-report/report.html + + - name: Rocket.Chat Notification + uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@master + if: always() && github.ref == 'refs/heads/main' + with: + type: ${{ job.status }} + job_name: '*Roles Test*' + mention_if: 'failure' + channel: '#sso-ops' + url: ${{ secrets.ROCKETCHAT_WEBHOOK }} + + search-tests: + runs-on: ubuntu-latest + needs: pre-reqs + strategy: + fail-fast: false # https://github.com/cypress-io/github-action/issues/48 + steps: + # Checkout the PR branch + - name: Checkout Target Branch + uses: actions/checkout@v4 - name: Search Users uses: cypress-io/github-action@v6 id: search-users @@ -180,8 +358,6 @@ jobs: browser: chrome # project: ./e2e ci-build-id: ${{ github.event.number }} - env: - NODE_OPTIONS: '--max-old-space-size=4096' - name: Run the reports run: | @@ -191,7 +367,7 @@ jobs: - name: Upload Test Reports uses: actions/upload-artifact@v4 with: - name: test-results + name: search-test-results path: testing/mochawesome-report/report.html - name: Rocket.Chat Notification @@ -199,7 +375,7 @@ jobs: if: always() && github.ref == 'refs/heads/main' with: type: ${{ job.status }} - job_name: '*End-To-End Test*' + job_name: '*Search Test*' mention_if: 'failure' channel: '#sso-ops' url: ${{ secrets.ROCKETCHAT_WEBHOOK }} diff --git a/testing/cypress/e2e/integration-900-deleteIntegration.cy.ts b/testing/cypress/e2e/integration-900-deleteIntegration.cy.ts index 0da8be3..fdbfe49 100644 --- a/testing/cypress/e2e/integration-900-deleteIntegration.cy.ts +++ b/testing/cypress/e2e/integration-900-deleteIntegration.cy.ts @@ -2,6 +2,8 @@ import data1 from '../fixtures/requestsafter.json'; // The data file will drive the tests import Request from '../appActions/Request'; +import Utility from '../appActions/Utilities'; +let util = new Utility(); const testData = data1; // Define the testData array @@ -29,15 +31,17 @@ if (!Cypress.env('localtest')) { // The set up below allows for reporting on each test case testData.forEach((data, index) => { // Only run the test if the smoketest flag is set and the test is a smoketest - it(`Delete: ${data.create.projectname} (Test ID: ${data.create.test_id}) - ${data.create.description}`, () => { - let req = new Request(); - if (data.delete && data.id) { - req.showCreateContent(data); - req.id = data.id; - req.deleteRequest(req.id); - req = null; - } - }); + if (util.runOk(data)) { + it(`Delete: ${data.create.projectname} (Test ID: ${data.create.test_id}) - ${data.create.description}`, () => { + let req = new Request(); + if (data.delete && data.id) { + req.showCreateContent(data); + req.id = data.id; + req.deleteRequest(req.id); + req = null; + } + }); + } }); }); } diff --git a/testing/cypress/e2e/integration-910-deleteIntegrationRoles.cy.ts b/testing/cypress/e2e/integration-910-deleteIntegrationRoles.cy.ts index 1b71543..9755ab9 100644 --- a/testing/cypress/e2e/integration-910-deleteIntegrationRoles.cy.ts +++ b/testing/cypress/e2e/integration-910-deleteIntegrationRoles.cy.ts @@ -2,6 +2,8 @@ import data1 from '../fixtures/requests-rolesafter.json'; // The data file will drive the tests import Request from '../appActions/Request'; +import Utility from '../appActions/Utilities'; +let util = new Utility(); const testData = data1; // Define the testData array @@ -29,15 +31,17 @@ if (!Cypress.env('localtest')) { // The set up below allows for reporting on each test case testData.forEach((data, index) => { // Only run the test if the smoketest flag is set and the test is a smoketest - it(`Delete: ${data.create.projectname} (Test ID: ${data.create.test_id}) - ${data.create.description}`, () => { - let req = new Request(); - if (data.delete && data.id) { - req.showCreateContent(data); - req.id = data.id; - req.deleteRequest(req.id); - req = null; - } - }); + if (util.runOk(data)) { + it(`Delete: ${data.create.projectname} (Test ID: ${data.create.test_id}) - ${data.create.description}`, () => { + let req = new Request(); + if (data.delete && data.id) { + req.showCreateContent(data); + req.id = data.id; + req.deleteRequest(req.id); + req = null; + } + }); + } }); }); } diff --git a/testing/cypress/e2e/integration-990-deleteAllIntegrations.cy.ts b/testing/cypress/e2e/integration-990-deleteAllIntegrations.cy.ts index 318bf28..986f8e6 100644 --- a/testing/cypress/e2e/integration-990-deleteAllIntegrations.cy.ts +++ b/testing/cypress/e2e/integration-990-deleteAllIntegrations.cy.ts @@ -1,13 +1,15 @@ import Request from '../appActions/Request'; -before(() => { - cy.cleanGC(); -}); - -after(() => { - cy.cleanGC(); -}); +import Utility from '../appActions/Utilities'; +let util = new Utility(); describe('Delete All Integrations', () => { + before(() => { + cy.cleanGC(); + }); + + after(() => { + cy.cleanGC(); + }); it('Delete All Requests as default user', function () { cy.setid(null).then(() => { cy.login(null, null, null, null);