Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Milo Libs runs #237

Merged
merged 6 commits into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ jobs:
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set permissions
run: chmod +x ./path/to/run.sh

- name: Run Nala ${{ inputs.platform }}
uses: ./
env:
Expand Down
54 changes: 54 additions & 0 deletions .github/workflows/milolib.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Run Nala on Milo Libs Manually

on:
workflow_dispatch:
inputs:
branch:
description: 'Provide the branch url'
required: false
type: string
milolibs:
description: 'Provide MiloLibs param'
required: false
type: string
tags:
description: 'Test scenario tags, if empty all tests will run. i.e., @marquee'
required: false
type: string
platform:
description: 'Platform to run tests on; select one, options: [ubuntu-latest, windows-latest, macos-latest]'
required: true
type: string

jobs:
action:
name: Running tests
runs-on: ${{ inputs.platform }}
env:
WORKFLOW_NAME: 'Milo Libs Run'
MILO_LIBS_RUN: 'true'

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set environment variables
run: |
echo "PR_BRANCH_MILOLIBS_LIVE_URL=${{ github.event.inputs.branch }}" >> $GITHUB_ENV
echo "MILO_LIBS=${{ github.event.inputs.milolibs }}" >> $GITHUB_ENV

- name: Run Nala ${{ inputs.platform }}
uses: ./
env:
labels: ${{ inputs.tags }}
IMS_EMAIL: ${{ secrets.IMS_EMAIL }}
IMS_PASS: ${{ secrets.IMS_PASS }}
HLX_TKN: ${{ secrets.HLX_TKN }}
SLACK_WH: ${{ secrets.SLACK_WH }}
- name: Persist JSON Artifact
uses: actions/upload-artifact@v3
if: always()
with:
name: nala-results
path: nala-results.json
retention-days: 30
151 changes: 151 additions & 0 deletions global.setup_1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
import { exit } from 'process';
const { execSync } = require('child_process');
const { isBranchURLValid } = require('./libs/baseurl.js');
const axios = require('axios');

const MAIN_BRANCH_LIVE_URL = 'https://main--milo--adobecom.hlx.live';
const STAGE_BRANCH_URL = 'https://milo.stage.adobe.com';
const LOCALHOST_URL = 'http://localhost:3000';

async function getGitHubPRBranchLiveUrl() {
// get the pr number
const prReference = process.env.GITHUB_REF;
const prNumber = prReference.split('/')[2];

// get the pr branch name
const branch = process.env.GITHUB_HEAD_REF;
const prBranch = branch.replace(/\//g, '-');

// get the org and repo
const repository = process.env.GITHUB_REPOSITORY;
const repoParts = repository.split('/');
const toRepoOrg = repoParts[0];
const toRepoName = repoParts[1];

// Get the org and repo from the environment variables
const prFromOrg = process.env.prOrg;
const prFromRepoName = process.env.prRepo;


let prBranchLiveUrl;

if (toRepoName === 'nala' || toRepoName === 'janus') {
prBranchLiveUrl = MAIN_BRANCH_LIVE_URL;
} else {
prBranchLiveUrl = `https://${prBranch}--${prFromRepoName}--${prFromOrg}.hlx.live`;
}

try {
if (await isBranchURLValid(prBranchLiveUrl)) {
process.env.PR_BRANCH_LIVE_URL = prBranchLiveUrl;
}
console.info('PR Repository : ', repository);
console.info('PR TO ORG : ', toRepoOrg);
console.info('PR TO REPO : ', toRepoName);
console.info('PR From ORG : ', prFromOrg);
console.info('PR From REPO : ', prFromRepoName);
console.info('PR Branch : ', branch);
console.info('PR Branch(U) : ', prBranch);
console.info('PR Number : ', prNumber);
console.info('PR From Branch live url : ', prBranchLiveUrl);
} catch (err) {
console.error(`Error => Error in setting PR Branch test URL : ${prBranchLiveUrl}`);
console.info(`Note: PR branch test url ${prBranchLiveUrl} is not valid, Exiting test execution.`);
process.exit(1);
}
}

async function getGitHubMiloLibsBranchLiveUrl() {
const repository = process.env.GITHUB_REPOSITORY;

let prBranchLiveUrl;
let miloLibs;

prBranchLiveUrl = process.env.PR_BRANCH_MILOLIBS_LIVE_URL;
miloLibs = process.env.MILO_LIBS;

try {
if (await isBranchURLValid(prBranchLiveUrl)) {
process.env.PR_BRANCH_LIVE_URL = prBranchLiveUrl;
}
console.info('PR Repository : ', repository);
console.info('PR Branch live url : ', prBranchLiveUrl);
console.info('Milo Libs : ', miloLibs);
} catch (err) {
console.error(`Error => Error in setting PR Branch test URL : ${prBranchLiveUrl}`);
console.info(`Note: PR branch test url ${prBranchLiveUrl} is not valid, Exiting test execution.`);
process.exit(1);
}
}

async function getCircleCIBranchLiveUrl() {
const stageBranchLiveUrl = STAGE_BRANCH_URL;

try {
if (await isBranchURLValid(stageBranchLiveUrl)) {
process.env.PR_BRANCH_LIVE_URL = stageBranchLiveUrl;
}
console.info('Stage Branch Live URL : ', stageBranchLiveUrl);
} catch (err) {
console.error('Error => Error in setting Stage Branch test URL : ', stageBranchLiveUrl);
console.info('Note: Stage branch test url is not valid, Exiting test execution.');
process.exit(1);
}
}

async function getLocalBranchLiveUrl() {
try {
const localGitRootDir = execSync('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim();

if (localGitRootDir) {
const gitRemoteOriginUrl = execSync('git config --get remote.origin.url', { cwd: localGitRootDir, encoding: 'utf-8' }).trim();
const match = gitRemoteOriginUrl.match(/github\.com\/(.*?)\/(.*?)\.git/);

if (match) {
const [localOrg, localRepo] = match.slice(1, 3);
const localBranch = execSync('git rev-parse --abbrev-ref HEAD', { cwd: localGitRootDir, encoding: 'utf-8' }).trim();
let localTestLiveUrl;

if (localRepo === 'nala' || localRepo === 'janus') {
localTestLiveUrl = MAIN_BRANCH_LIVE_URL;
} else {
localTestLiveUrl = LOCALHOST_URL;
}

if (await isBranchURLValid(localTestLiveUrl)) {
process.env.LOCAL_TEST_LIVE_URL = localTestLiveUrl;
}
console.info('Git ORG : ', localOrg);
console.info('Git REPO : ', localRepo);
console.info('Local Branch : ', localBranch);
console.info('Local Test Live URL : ', process.env.LOCAL_TEST_LIVE_URL);
}
}
} catch (error) {
console.error(`Error => Error in setting local test URL : ${localTestLiveUrl}`);
console.info(`Note: Local or branch test url is not valid, Exiting test execution.`);
process.exit(1);
}
}

async function globalSetup() {
console.info('----Executing Global setup---------');

if (process.env.GITHUB_ACTIONS === 'true') {
console.info('---- Running Tests in the GitHub environment ---------');

if (process.env.MILO_LIBS_RUN === 'true') {
await getGitHubMiloLibsBranchLiveUrl();
} else {
await getGitHubPRBranchLiveUrl();
}
} else if (process.env.CIRCLECI) {
console.info('---- Running Tests in the CircleCI environment ---------');
await getCircleCIBranchLiveUrl();
} else {
console.info('---- Running Tests in the Local environment ---------');
await getLocalBranchLiveUrl();
}
}

export default globalSetup;
2 changes: 1 addition & 1 deletion playwright.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const envs = require('./envs/envs.js');
const config = {
testDir: './tests/milo',
outputDir: './test-results',
globalSetup: './global.setup.js',
globalSetup: './global.setup_1.js',
/* Maximum time one test can run for. */
timeout: 30 * 1000,
expect: {
Expand Down
20 changes: 11 additions & 9 deletions tests/milo/accordion.block.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import AccordionBlock from '../../selectors/milo/accordion.block.page.js';
let webUtil;
let accordion;
let consoleErrors = [];

const miloLibs = process.env.MILO_LIBS || '';
const knownConsoleErrors = ['Access-Control-Allow-Origin','Failed to load resource: net::ERR_FAILED'];

test.describe('Milo Accordion Block test suite', () => {
Expand All @@ -26,13 +28,13 @@ test.describe('Milo Accordion Block test suite', () => {

// Test 0 : Accordion
test(`${features[0].name},${features[0].tags}`, async ({ page, baseURL }) => {
console.info(`[Test Page]: ${baseURL}${features[0].path}`);
console.info(`[Test Page]: ${baseURL}${features[0].path}${miloLibs}`);
const { data } = features[0];

await test.step('step-1: Go to Accordion block test page', async () => {
await page.goto(`${baseURL}${features[0].path}`);
await page.goto(`${baseURL}${features[0].path}${miloLibs}`);
await page.waitForLoadState('domcontentloaded');
await expect(page).toHaveURL(`${baseURL}${features[0].path}`);
await expect(page).toHaveURL(`${baseURL}${features[0].path}${miloLibs}`);
});

await test.step('step-2: Verify Accrodion block content/specs', async () => {
Expand Down Expand Up @@ -68,13 +70,13 @@ test.describe('Milo Accordion Block test suite', () => {

// Test 1 : Accordion (seo)
test(`${features[1].name},${features[1].tags}`, async ({ page, baseURL }) => {
console.info(`[Test Page]: ${baseURL}${features[1].path}`);
console.info(`[Test Page]: ${baseURL}${features[1].path}${miloLibs}`);
const { data } = features[1];

await test.step('step-1: Go to Accordion block test page', async () => {
await page.goto(`${baseURL}${features[1].path}`);
await page.goto(`${baseURL}${features[1].path}${miloLibs}`);
await page.waitForLoadState('domcontentloaded');
await expect(page).toHaveURL(`${baseURL}${features[1].path}`);
await expect(page).toHaveURL(`${baseURL}${features[1].path}${miloLibs}`);
});

await test.step('step-2: Verify Accrodion seo block specs', async () => {
Expand Down Expand Up @@ -102,13 +104,13 @@ test.describe('Milo Accordion Block test suite', () => {

// Test 2 : Accordion (quiet, max-width-12-desktop-large)
test(`${features[2].name},${features[2].tags}`, async ({ page, baseURL }) => {
console.info(`[Test Page]: ${baseURL}${features[2].path}`);
console.info(`[Test Page]: ${baseURL}${features[2].path}${miloLibs}`);
const { data } = features[2];

await test.step('step-1: Go to Accordion block test page', async () => {
await page.goto(`${baseURL}${features[2].path}`);
await page.goto(`${baseURL}${features[2].path}${miloLibs}`);
await page.waitForLoadState('domcontentloaded');
await expect(page).toHaveURL(`${baseURL}${features[2].path}`);
await expect(page).toHaveURL(`${baseURL}${features[2].path}${miloLibs}`);
});

await test.step('step-2: Verify Accrodion block content/specs', async () => {
Expand Down
4 changes: 3 additions & 1 deletion utils/reporters/base-reporter.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ class BaseReporter {
const totalTests = this.results.length;
const passPercentage = ((this.passedTests / totalTests) * 100).toFixed(2);
const failPercentage = ((this.failedTests / totalTests) * 100).toFixed(2);
let envURL = process.env.PR_BRANCH_LIVE_URL || this.config.projects[0].use.baseURL;
const miloLibs = process.env.MILO_LIBS || '';
const prBranchUrl = process.env.PR_BRANCH_LIVE_URL + miloLibs
let envURL = prBranchUrl || this.config.projects[0].use.baseURL;
let exeEnv = 'Local Environment';
let runUrl = 'Local Environment';
let runName = 'Nala Local Run';
Expand Down
Loading