Skip to content

Commit

Permalink
test: merge from main
Browse files Browse the repository at this point in the history
  • Loading branch information
Tina Gohil authored and Tina Gohil committed Jan 13, 2025
2 parents 5d913fe + 3bc5c36 commit 005f19e
Show file tree
Hide file tree
Showing 11 changed files with 314 additions and 71 deletions.
9 changes: 9 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -269,4 +269,13 @@ jobs:
app_name: ${{ matrix.app_name }}
test_project_name: ${{ matrix.test_project_name }}
project_type: service
secrets: inherit

run-ui-e2e-tests:
if: ${{ startsWith(inputs.environment, 'Test') || inputs.environment == 'Pre-production' }}
name: Run E2E Test Suite
needs: [ deploy-ui-services ]
uses: ./.github/workflows/run-e2e-tests.yml
with:
environment: ${{ inputs.environment }}
secrets: inherit
106 changes: 106 additions & 0 deletions .github/workflows/e2e-seed-database.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Seed Database with E2E Test Data
run-name: Seed ${{ inputs.environment }} Database with E2E Test Data (${{ inputs.action }})

on:
workflow_dispatch:
inputs:
environment:
description: The environment target to seed test data in
default: 'Development'
type: choice
options:
- 'Development'
- 'Test'
- 'Test2'
- 'Pre-production'
action:
description: Whether to run the setup or teardown script
default: 'Teardown'
type: choice
options:
- 'Setup'
- 'Teardown'
workflow_call:
inputs:
environment:
required: true
type: string
action:
required: true
type: string

permissions:
id-token: write
contents: read

jobs:
run-seed-script:
name: Run ${{ inputs.action }} Script
runs-on: ubuntu-24.04
environment: ${{ inputs.environment }}
defaults:
run:
working-directory: "test/e2e-seed-data-framework"
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}

- name: Install NodeJS
uses: actions/setup-node@v4
with:
node-version: "lts/Jod" # 22 LTS

- name: Install NPM Packages
shell: bash
run: npm i

- name: Get Workflow Runner IP
id: runner-ip
uses: ./.github/actions/get-runner-ip-address

- name: Azure CLI Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Add Azure Firewall Rule
uses: ./.github/actions/azure-firewall-ip
with:
ip_address: ${{ steps.runner-ip.outputs.ip_address }}
action: "Add"
az_resource_group: ${{ vars.AZURE_RESOURCE_PREFIX }}-familyhubs
az_sql_server_name: ${{ vars.AZURE_RESOURCE_PREFIX }}-as-fh-sql-server
az_firewall_rule_name: E2E-SEED-SCRIPT

- name: Create Environment Variables
shell: bash
run: |
cat <<'EOF' > .env
IDS_START_FROM=1000000
CONNECTION_STRING_SERVICEDIRECTORY='${{ secrets.PLAYWRIGHT_CONNECTION_STRING_SERVICE_DIRECTORY_DATABASE }}'
CONNECTION_STRING_REFERRAL='${{ secrets.PLAYWRIGHT_CONNECTION_STRING_REFERRAL_DATABASE }}'
CONNECTION_STRING_REPORT='${{ secrets.PLAYWRIGHT_CONNECTION_STRING_REPORT_DATABASE }}'
ENCRYPTION_KEY='${{ secrets.PLAYWRIGHT_REFERRAL_COLUMN_ENCRYPTION_KEY }}'
INITIALISATION_VECTOR='${{ secrets.PLAYWRIGHT_REFERRAL_COLUMN_INITIALISATION_VECTOR }}'
EXAMPLE_SEED=False
EOF
- name: Run ${{ inputs.action }}
shell: bash
run: |
SCRIPT=$(tr '[:upper:]' '[:lower:]' <<< "${{ inputs.action }}")
npm run $SCRIPT:dev
- name: Remove Azure Firewall Rule
if: always()
uses: ./.github/actions/azure-firewall-ip
with:
ip_address: ${{ steps.runner-ip.outputs.ip_address }}
action: "Remove"
az_resource_group: ${{ vars.AZURE_RESOURCE_PREFIX }}-familyhubs
az_sql_server_name: ${{ vars.AZURE_RESOURCE_PREFIX }}-as-fh-sql-server
az_firewall_rule_name: E2E-SEED-SCRIPT
132 changes: 132 additions & 0 deletions .github/workflows/run-e2e-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Run E2E Test Suite
run-name: Run E2E Test Suite on ${{ inputs.environment }}

on:
workflow_dispatch:
inputs:
environment:
description: The environment to run the E2E tests on
default: 'Development'
type: choice
options:
- 'Development'
- 'Test'
- 'Test2'
- 'Pre-production'
workflow_call:
inputs:
environment:
required: true
type: string

permissions:
id-token: write
contents: read

jobs:
pre-test-teardown:
name: Pre-Test Database Teardown
uses: ./.github/workflows/e2e-seed-database.yml
with:
environment: ${{ inputs.environment }}
action: 'Teardown'
secrets: inherit

pre-test-setup:
needs: [ pre-test-teardown ]
name: Pre-Test Database Setup
uses: ./.github/workflows/e2e-seed-database.yml
with:
environment: ${{ inputs.environment }}
action: 'Setup'
secrets: inherit

run-test-suite:
needs: [ pre-test-setup ]
name: ${{ matrix.job_name }}
strategy:
fail-fast: false
matrix:
suite: [ find-e2e-tests, manage-e2e-tests ]
include:
- suite: find-e2e-tests
job_name: E2E - Find UI
base_url: ${{ vars.PLAYWRIGHT_FIND_BASE_URL }}
- suite: manage-e2e-tests
job_name: E2E - Manage UI
base_url: ${{ vars.PLAYWRIGHT_MANAGE_BASE_URL }}
runs-on: ubuntu-24.04
environment: ${{ inputs.environment }}
defaults:
run:
working-directory: "test/${{ matrix.suite }}"
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}

- name: Install NodeJS
uses: actions/setup-node@v4
with:
node-version: "lts/Jod" # 22 LTS

- name: Install NPM Packages
shell: bash
run: npm i

- name: Install Playwright Dependencies
shell: bash
run: npx playwright install-deps

- name: Get Playwright Version
id: playwright-version
shell: bash
run: |
ARRAY=($(npx playwright --version))
VERSION=${ARRAY[1]}
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Playwright Browser Cache
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-PlayWright-${{ steps.playwright-version.outputs.VERSION }}

- name: Install Playwright Browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
shell: bash
run: npx playwright install

- name: Create Environment Variables
shell: bash
run: |
cat <<'EOF' > .env
BASE_URL='${{ vars.PLAYWRIGHT_ENVIRONMENT_PREFIX }}${{ matrix.base_url }}'
USER_NAME='${{ secrets.PLAYWRIGHT_USER_NAME }}'
PASSWORD='${{ secrets.PLAYWRIGHT_PASSWORD }}'
DFE_ADMIN_USER='${{ secrets.PLAYWRIGHT_GOVLOGIN_DFE_ADMIN_USER }}'
GOV_LOGIN_PASSWORD='${{ secrets.PLAYWRIGHT_GOVLOGIN_PASSWORD }}'
EOF
- name: Run Playwright Test Suite
shell: bash
run: npx playwright test

- name: Upload Report
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-${{ matrix.suite }}
path: "**/playwright-report/"

# Intentionally doesn't run after test failure to facilitate analysis
post-test-teardown:
needs: [ run-test-suite ]
name: Post-Test Database Teardown
uses: ./.github/workflows/e2e-seed-database.yml
with:
environment: ${{ inputs.environment }}
action: 'Teardown'
secrets: inherit
2 changes: 1 addition & 1 deletion test/find-e2e-tests/.env
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# .env
BASE_URL=https://test2.find-support-for-your-family.education.gov.uk/
BASE_URL=https://test.find-support-for-your-family.education.gov.uk/
58 changes: 25 additions & 33 deletions test/find-e2e-tests/playwright.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { defineConfig, devices } from '@playwright/test';
import {defineConfig, devices} from '@playwright/test';
import type { SerenityOptions } from '@serenity-js/playwright-test';
import dotenv from 'dotenv';

dotenv.config();


export default defineConfig<SerenityOptions>({
testDir: './tests',
/* Maximum time one test can run for, measured in milliseconds. */
Expand Down Expand Up @@ -55,61 +54,54 @@ export default defineConfig<SerenityOptions>({
trace: 'on-first-retry',

// Capture screenshot only on failure
screenshot: 'only-on-failure',
screenshot: 'only-on-failure'
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
name: 'Microsoft Edge',
use: {
...devices['Desktop Chrome'],
channel: 'msedge',
},
},

{
name: 'firefox',
name: 'Google Chrome',
use: {
channel: 'chrome',
},
},
{
name: 'Mobile Chrome',
use: {
...devices['Pixel 5'],
},
},
// Firefox & Safari have a temporary workaround to ignore HTTPS errors due to a bug around TLS certificates.
// Jira Ticket: https://dfedigital.atlassian.net.mcas.ms/browse/FHB-1180
{
name: 'Firefox',
use: {
...devices['Desktop Firefox'],
ignoreHTTPSErrors: true
},
},

{
name: 'webkit',
name: 'Safari',
use: {
...devices['Desktop Safari'],
ignoreHTTPSErrors: true
},
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: {
// ...devices['Pixel 5'],
// },
// },
//TODO: Get tests running on mobile safari - need some custom code to scroll elements into view.
// {
// name: 'Mobile Safari',
// use: {
// ...devices['iPhone 12'],
// },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: {
// channel: 'msedge',
// },
// },
// {
// name: 'Google Chrome',
// use: {
// channel: 'chrome',
// },
// },
// }
],

/* Folder for test artifacts such as screenshots, videos, traces, etc. */
outputDir: 'test-results/',
});
});
Loading

0 comments on commit 005f19e

Please sign in to comment.