Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
a2dc03b
initial commit of poc
dmcintyr-akamai Mar 6, 2025
ce9a034
initial commit
dmcintyr-akamai Mar 10, 2025
c52a127
fix
dmcintyr-akamai Mar 10, 2025
68ffcfb
Merge remote-tracking branch 'origin' into M3-9256_cypress-html-repor…
dmcintyr-akamai Mar 10, 2025
509eec8
Added changeset: html presentation for cypress test results
dmcintyr-akamai Mar 10, 2025
f1f54cd
Merge remote-tracking branch 'origin' into M3-9256_cypress-html-repor…
dmcintyr-akamai Mar 13, 2025
b83100a
cleanup packages
dmcintyr-akamai Mar 13, 2025
46b6f1e
cleanup
dmcintyr-akamai Mar 13, 2025
f4e4f83
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 14, 2025
7e6b3b2
fix lock file
dmcintyr-akamai Mar 14, 2025
57f5a80
trying to fix lock file
dmcintyr-akamai Mar 14, 2025
e85a09a
cleanup
dmcintyr-akamai Mar 14, 2025
4e11811
fix ts error for mochawesome
dmcintyr-akamai Mar 14, 2025
9fa04f6
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 14, 2025
6c4870a
Merge remote-tracking branch 'origin/develop' into M3-9256_cypress-ht…
dmcintyr-akamai Mar 14, 2025
b5ea5bc
Merge remote-tracking branch 'origin/develop' into M3-9256_cypress-ht…
dmcintyr-akamai Mar 14, 2025
9b50254
Merge remote-tracking branch 'origin/develop' into M3-9256_cypress-ht…
dmcintyr-akamai Mar 14, 2025
3854a94
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 17, 2025
3d8476c
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 18, 2025
2caf02e
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 18, 2025
8ac5c19
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 18, 2025
55e55ca
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 19, 2025
7451f2e
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 19, 2025
ee96bde
enable multiple cypress reporters
dmcintyr-akamai Mar 19, 2025
5b2c161
Merge branch 'M3-9256_cypress-html-reporting' of github.com:dmcintyr-…
dmcintyr-akamai Mar 19, 2025
cff04a4
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 19, 2025
141e9b8
fix junit config
dmcintyr-akamai Mar 19, 2025
d44cb10
fix junit reporting
dmcintyr-akamai Mar 20, 2025
17aa60b
fix junit rpt
dmcintyr-akamai Mar 20, 2025
c34a204
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 20, 2025
ff114b6
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 20, 2025
7a0c574
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 24, 2025
c9922a2
refactor component vs core test suites
dmcintyr-akamai Mar 25, 2025
29ddf32
Merge branch 'M3-9256_cypress-html-reporting' of github.com:dmcintyr-…
dmcintyr-akamai Mar 25, 2025
6a6ac63
remove debug code
dmcintyr-akamai Mar 25, 2025
5973ddc
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 26, 2025
84ec837
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 27, 2025
bbdbbec
inline assets option
dmcintyr-akamai Mar 27, 2025
4136c34
demo changes
dmcintyr-akamai Mar 27, 2025
dbb8895
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 27, 2025
81ce68b
remove debug code
dmcintyr-akamai Mar 31, 2025
1ae3146
Merge branch 'M3-9256_cypress-html-reporting' of github.com:dmcintyr-…
dmcintyr-akamai Mar 31, 2025
78dab3b
revert change
dmcintyr-akamai Mar 31, 2025
3a1da26
revert format change
dmcintyr-akamai Mar 31, 2025
5e82a5a
Merge branch 'develop' into M3-9256_cypress-html-reporting
dmcintyr-akamai Mar 31, 2025
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ packages/manager/test-report.xml
**/manager/cypress/downloads/
**/manager/cypress/results/
**/manager/cypress/screenshots/
**/manager/cypress/reports/

packages/manager/cypress/fixtures/example.json

Expand Down
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ x-e2e-env:

# Cypress reporting.
CY_TEST_JUNIT_REPORT: ${CY_TEST_JUNIT_REPORT}
CY_TEST_HTML_REPORT: ${CY_TEST_HTML_REPORT}
CY_TEST_USER_REPORT: ${CY_TEST_USER_REPORT}

# Cloud Manager build environment.
Expand Down
1 change: 1 addition & 0 deletions docs/development-guide/08-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ Environment variables related to Cypress logging and reporting, as well as repor
|---------------------------------|----------------------------------------------------|------------------|----------------------------|
| `CY_TEST_USER_REPORT` | Log test account information when tests begin | `1` | Unset; disabled by default |
| `CY_TEST_JUNIT_REPORT` | Enable JUnit reporting | `1` | Unset; disabled by default |
| `CY_TEST_HTML_REPORT` | Generate html report containing E2E test results | `1` | Unset; disabled by default |
| `CY_TEST_DISABLE_FILE_WATCHING` | Disable file watching in Cypress UI | `1` | Unset; disabled by default |
| `CY_TEST_DISABLE_RETRIES` | Disable test retries on failure in CI | `1` | Unset; disabled by default |
| `CY_TEST_FAIL_ON_MANAGED` | Fail affected tests when Managed is enabled | `1` | Unset; disabled by default |
Expand Down
5 changes: 5 additions & 0 deletions packages/manager/.changeset/pr-11795-tests-1741634978355.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/manager": Tests
---

html presentation for cypress test results ([#11795](https://github.com/linode/manager/pull/11795))
28 changes: 17 additions & 11 deletions packages/manager/cypress.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import { defineConfig } from 'cypress';
import { setupPlugins } from './cypress/support/plugins';
import { configureBrowser } from './cypress/support/plugins/configure-browser';
import { configureFileWatching } from './cypress/support/plugins/configure-file-watching';
import { configureTestSuite } from './cypress/support/plugins/configure-test-suite';
import {
enableJunitE2eReport,
enableJunitComponentReport,
} from './cypress/support/plugins/junit-report';
import { discardPassedTestRecordings } from './cypress/support/plugins/discard-passed-test-recordings';
import { loadEnvironmentConfig } from './cypress/support/plugins/load-env-config';
import { nodeVersionCheck } from './cypress/support/plugins/node-version-check';
Expand All @@ -13,14 +16,15 @@ import { configureApi } from './cypress/support/plugins/configure-api';
import { fetchAccount } from './cypress/support/plugins/fetch-account';
import { fetchLinodeRegions } from './cypress/support/plugins/fetch-linode-regions';
import { splitCypressRun } from './cypress/support/plugins/split-run';
import { enableJunitReport } from './cypress/support/plugins/junit-report';
import { generateTestWeights } from './cypress/support/plugins/generate-weights';
import { logTestTagInfo } from './cypress/support/plugins/test-tagging-info';
import cypressViteConfig from './cypress/vite.config';
import { featureFlagOverrides } from './cypress/support/plugins/feature-flag-override';
import { postRunCleanup } from './cypress/support/plugins/post-run-cleanup';
import { resetUserPreferences } from './cypress/support/plugins/reset-user-preferences';

import { enableHtmlReport } from './cypress/support/plugins/html-report';
import { configureMultiReporters } from './cypress/support/plugins/configure-multi-reporters';
import cypressOnFix from 'cypress-on-fix';
/**
* Exports a Cypress configuration object.
*
Expand Down Expand Up @@ -62,11 +66,14 @@ export default defineConfig({
viewportWidth: 500,
viewportHeight: 500,

setupNodeEvents(on, config) {
setupNodeEvents(cypressOn, config) {
const on = cypressOnFix(cypressOn);
return setupPlugins(on, config, [
loadEnvironmentConfig,
discardPassedTestRecordings,
enableJunitReport('Component', true),
enableJunitComponentReport,
enableHtmlReport,
configureMultiReporters,
]);
},
},
Expand All @@ -76,18 +83,15 @@ export default defineConfig({

// This can be overridden using `CYPRESS_BASE_URL`.
baseUrl: 'http://localhost:3000',

// This is overridden when `CY_TEST_SUITE` is defined.
// See `cypress/support/plugins/configure-test-suite.ts`.
specPattern: 'cypress/e2e/core/**/*.spec.{ts,tsx}',

setupNodeEvents(on, config) {
setupNodeEvents(cypressOn, config) {
const on = cypressOnFix(cypressOn);
return setupPlugins(on, config, [
loadEnvironmentConfig,
nodeVersionCheck,
configureApi,
configureFileWatching,
configureTestSuite,
configureBrowser,
vitePreprocess,
discardPassedTestRecordings,
Expand All @@ -98,8 +102,10 @@ export default defineConfig({
featureFlagOverrides,
logTestTagInfo,
splitCypressRun,
enableJunitReport(),
generateTestWeights,
enableJunitE2eReport,
enableHtmlReport,
configureMultiReporters,
postRunCleanup,
]);
},
Expand Down
2 changes: 2 additions & 0 deletions packages/manager/cypress/support/e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
// ***********************************************************

import '@testing-library/cypress/add-commands';
// reporter needs to register for events in order to attach media to test results in html report
import 'cypress-mochawesome-reporter/register';
// Cypress command and assertion setup.
import chaiString from 'chai-string';
import 'cypress-axe';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { CypressPlugin } from './plugin';
// The name of the environment variable to read when checking report configuration.
const envVarJunit = 'CY_TEST_JUNIT_REPORT';
const envVarHtml = 'CY_TEST_HTML_REPORT';

/**
* Configure multiple reporters to be used by Cypress
* Multireporter uses between 0 and 2 reporters (junit, html)
* and for either core or component directory
*
* @returns Cypress configuration object.
*/
export const configureMultiReporters: CypressPlugin = (_on, config) => {
const arrReporters = [];
if (config.env[envVarJunit]) {
console.log('Junit reporting configuration added.');
arrReporters.push('mocha-junit-reporter');
}
if (config.env[envVarHtml]) {
console.log('Html reporting configuration added.');
arrReporters.push('cypress-mochawesome-reporter');
}
if (arrReporters.length > 0) {
config.reporter = 'cypress-multi-reporters';
if (!config.reporterOptions) {
config.reporterOptions = {};
}
config.reporterOptions.reporterEnabled = arrReporters.join(', ');
} else {
console.log('No reporters configured.');
}
return config;
};

This file was deleted.

33 changes: 33 additions & 0 deletions packages/manager/cypress/support/plugins/html-report.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { CypressPlugin } from './plugin';
import cypressReporterLib from 'cypress-mochawesome-reporter/lib';
const { beforeRunHook, afterRunHook } = cypressReporterLib;

// The name of the environment variable to read when checking report configuration.
const envVarName = 'CY_TEST_HTML_REPORT';

/**
* @returns Cypress configuration object.
*/
export const enableHtmlReport: CypressPlugin = async function (on, config) {
if (!!config.env[envVarName]) {
if (!config.reporterOptions) {
config.reporterOptions = {};
}
config.reporterOptions.cypressMochawesomeReporterReporterOptions = {
reportPageTitle: 'Cloud Manager E2e Test Results',
inlineAssets: true,
embeddedScreenshots: true,
videoOnFailOnly: true,
charts: true,
quiet: true,
};
on('before:run', async (results) => {
await beforeRunHook(results);
});

on('after:run', async () => {
await afterRunHook();
});
}
return config;
};
61 changes: 28 additions & 33 deletions packages/manager/cypress/support/plugins/junit-report.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,42 +8,37 @@ const capitalize = (str: string): string => {
};

/**
* Returns a plugin to enable JUnit reporting when `CY_TEST_JUNIT_REPORT` is defined.
*
* If no suite name is specified, this function will attempt to determine the
* suite name using the Cypress configuration object.
*
* @param suiteName - Optional suite name in the JUnit output.
*
* @returns Cypress configuration object.
*/
export const enableJunitReport = (
suiteName?: string,
jenkinsMode: boolean = false
): CypressPlugin => {
return (_on, config) => {
if (!!config.env[envVarName]) {
// Use `suiteName` if it is specified.
// Otherwise, attempt to determine the test suite name using
// our Cypress configuration.
const testSuite = suiteName || config.env['cypress_test_suite'] || 'core';

const testSuiteName = `${capitalize(testSuite)} Test Suite`;
export const enableJunitE2eReport: CypressPlugin = (_on, config) => {
const testSuiteName = 'core';
return getCommonJunitConfig(testSuiteName, config);
};

// Cypress doesn't know to look for modules in the root `node_modules`
// directory, so we have to pass a relative path.
// See also: https://github.com/cypress-io/cypress/issues/6406
config.reporter = 'node_modules/mocha-junit-reporter';
/**
* @returns Cypress configuration object.
*/
export const enableJunitComponentReport: CypressPlugin = (_on, config) => {
const testSuiteName = 'component';
return getCommonJunitConfig(testSuiteName, config);
};

// See also: https://www.npmjs.com/package/mocha-junit-reporter#full-configuration-options
config.reporterOptions = {
mochaFile: 'cypress/results/test-results-[hash].xml',
rootSuiteTitle: 'Cloud Manager Cypress Tests',
testsuitesTitle: testSuiteName,
jenkinsMode,
suiteTitleSeparatedBy: jenkinsMode ? 'β†’' : ' ',
};
const getCommonJunitConfig = (
testSuite: string,
config: Cypress.PluginConfigOptions
) => {
if (!!config.env[envVarName]) {
if (!config.reporterOptions) {
config.reporterOptions = {};
}
return config;
};
const testSuiteName = `${capitalize(testSuite)} Test Suite`;
config.reporterOptions.mochaJunitReporterReporterOptions = {
mochaFile: 'cypress/results/test-results-[hash].xml',
rootSuiteTitle: 'Cloud Manager Cypress Tests',
testsuitesTitle: testSuiteName,
jenkinsMode: true,
suiteTitleSeparatedBy: 'β†’',
};
}
return config;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare module 'cypress-mochawesome-reporter/lib';
5 changes: 4 additions & 1 deletion packages/manager/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@
"@hookform/resolvers": "3.9.1",
"@linode/api-v4": "workspace:*",
"@linode/design-language-system": "^4.0.0",
"@linode/validation": "workspace:*",
"@linode/queries": "workspace:*",
"@linode/search": "workspace:*",
"@linode/shared": "workspace:*",
"@linode/ui": "workspace:*",
"@linode/utilities": "workspace:*",
"@linode/validation": "workspace:*",
"@lukemorales/query-key-factory": "^1.3.4",
"@mui/icons-material": "^6.4.5",
"@mui/material": "^6.4.5",
Expand Down Expand Up @@ -184,6 +184,9 @@
"cypress": "14.0.1",
"cypress-axe": "^1.6.0",
"cypress-file-upload": "^5.0.8",
"cypress-mochawesome-reporter": "^3.8.2",
"cypress-multi-reporters": "^2.0.5",
"cypress-on-fix": "^1.1.0",
"cypress-real-events": "^1.14.0",
"cypress-vite": "^1.6.0",
"dotenv": "^16.0.3",
Expand Down
Loading