Skip to content

E2E_API Tests

E2E_API Tests #320

Workflow file for this run

name: E2E_API Tests
on:
# workflow will run daily at 8:00 AM BDT (2:00 AM UTC)
schedule:
- cron: 0 2 * * *
# workflow will trigger on pull request
pull_request:
branches: [develop]
# workflow will trigger on push to develop branch
push:
branches: [develop]
# workflow can be manually triggered
workflow_dispatch:
inputs:
testsuite:
description: Choose which test suite to run
default: All
type: choice
options:
- E2E
- API
- All
# Cancels all previous workflow runs for pull requests that have not completed.
concurrency:
# The concurrency group contains the workflow name and the branch name for pull requests or the commit hash for any other events.
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
cancel-in-progress: true
# workflow permissions
permissions:
checks: write
contents: write
issues: write
pull-requests: write
# workflow environment variables
env:
ADMIN: admin
ADMIN_PASSWORD: password
VENDOR: vendor1
VENDOR2: vendor2
CUSTOMER: customer1
USER_PASSWORD: 01dokan01
GMAP: ${{secrets.GMAP}}
BASE_URL: http://localhost:9999
CI: true
FORCE_COLOR: 1
DB_HOST_NAME: localhost
DB_USER_NAME: root
DB_USER_PASSWORD: password
DATABASE: tests-wordpress
DB_PREFIX: wp
PR_NUMBER: ${{ github.event.number }}
SHA: ${{ github.event.pull_request.head.sha }}
SYSTEM_INFO: ./tests/pw/playwright/systemInfo.json
API_TEST_RESULT: ./tests/pw/playwright-report/api/summary-report/results.json
E2E_TEST_RESULT: ./tests/pw/playwright-report/e2e/summary-report/results.json
API_COVERAGE: ./tests/pw/playwright-report/api/coverage-report/coverage.json
jobs:
tests:
name: e2e_api tests
runs-on: ubuntu-latest
steps:
- name: Checkout testing repo
uses: actions/checkout@v4
- name: Use desired version of NodeJS
if: success()
uses: actions/setup-node@v4
with:
node-version: 16
cache: npm
- name: Composer install and build (Dokan-lite)
if: success()
run: |
composer install --no-dev -o
- name: Npm install and build (Dokan-lite)
if: success()
run: |
npm ci || npm i
npm run build
# Install test dependencies
- name: Install test dependencies
if: success()
run: |
cd tests/pw
npm ci || npm i
# Create wp debuglog file
- name: Create wp debuglog file
if: success()
run: |
cd tests/pw
mkdir -p wp-data && touch wp-data/debug.log
# Start wordpress environment
- name: Start WordPress Env
id: wp-env
if: success()
run: |
cd tests/pw
npm run start:env
# Grab test db port
- name: Get Test DB PORT
id: db-port
if: success()
run: |
cd tests/pw
echo "DB_PORT=$(docker ps -f ancestor='mariadb' -f name='tests-mysql' --format='{{.Ports}}' | sed -E 's/.*:(.*)->.*/\1/')" >> $GITHUB_ENV
# db port
- name: DB PORT
if: success()
run: |
cd tests/pw
echo "The value of test DB_PORT is ${{ env.DB_PORT }}"
# Set permalink structure
- name: Set Permalink structure
if: success()
run: |
cd tests/pw
npm run wp-env run tests-cli wp rewrite structure /%postname%/
# Activate theme
- name: Activate theme:Storefront
if: success()
run: |
cd tests/pw
npm run wp-env run tests-cli wp theme activate storefront
# Get Playwright version
- name: Get installed Playwright version
id: playwright-version
if: success()
run: |
cd tests/pw
echo "PLAYWRIGHT_VERSION=$(npm ls @playwright/test --json | jq --raw-output '.dependencies["@playwright/test"].version')" >> $GITHUB_ENV
# Cache browser binaries, cache key is based on Playwright version and OS
- name: Cache playwright binaries
id: playwright-cache
if: success()
uses: actions/cache@v4
with:
path: |
~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
restore-keys: |
${{ runner.os }}-playwright-
# Install browser binaries & OS dependencies if cache missed
- name: Install Playwright browser binaries & OS dependencies
id: pw-install
if: success() && steps.playwright-cache.outputs.cache-hit != 'true'
run: |
cd tests/pw
npm run pw:browser-with-deps
# # Install only the OS dependencies if cache hit not needed
# - name: Install Playwright OS dependencies
# if: steps.playwright-cache.outputs.cache-hit == 'true'
# run: |
# cd tests/pw
# npm run pw:deps-only
# Run e2e tests
- name: 🧪 Running the e2e tests
id: e2e-test
if: success() || ( success() && (github.event_name == 'workflow_dispatch' && (github.event.inputs.testsuite == 'E2E' || github.event.inputs.testsuite == 'All')))
timeout-minutes: 40
run: |
cd tests/pw
npm run test:e2e:lite
# Run API tests
- name: 🧪 Running the api tests
id: api-test
if: always() && steps.db-port.outcome == 'success' || ( always() && steps.db-port.outcome == 'success' && (github.event_name == 'workflow_dispatch' && (github.event.inputs.testsuite == 'API' || github.event.inputs.testsuite == 'All')))
timeout-minutes: 5
run: |
cd tests/pw
npm run test:api:lite
# Prepare test summary
- name: Prepare test summary
id: prepare-test-summary
uses: actions/github-script@v7
if: always()
with:
result-encoding: string
script: |
const script = require("./tests/pw/utils/gitTestSummary.ts")
return await script({github, context, core})
# # Find PR comment
# - name: Find PR comment by github-actions[bot]
# uses: peter-evans/find-comment@v3
# id: find-comment
# if: github.event_name == 'pull_request'
# with:
# issue-number: ${{ github.event.pull_request.number }}
# comment-author: 'github-actions[bot]'
# body-includes: Tests Summary
# # Post test summary as PR comment
# - name: Create or update PR comment
# uses: peter-evans/create-or-update-comment@v4
# if: github.event_name == 'pull_request'
# with:
# comment-id: ${{ steps.find-comment.outputs.comment-id }}
# issue-number: ${{ github.event.pull_request.number }}
# body: ${{ steps.prepare-test-summary.outputs.result }}
# reactions: hooray
# edit-mode: replace
# Backup Database
- name: Backup Database
if: steps.wp-env.outcome == 'success'
run: |
cd tests/pw
npm run wp-env run tests-cli wp db export wp-data/db.sql
# Upload artifacts
- name: Archive test artifacts (screenshots, HTML snapshots, Reports)
uses: actions/upload-artifact@v4
if: always()
with:
name: test-artifact
path: |
tests/pw/wp-data
tests/pw/playwright
tests/pw/playwright-report
if-no-files-found: ignore
retention-days: 30