keycloak-scim/js/apps/admin-ui/cypress.config.js
Hynek Mlnarik 7daa2a0471 Only store videos of failed Cypress tests
`cypressSplit` function overrides the `after:spec` trigger which
is used for removing videos of successful tests.

Fixes: #29471

Signed-off-by: Hynek Mlnarik <hmlnarik@redhat.com>
2024-05-13 16:57:32 +02:00

66 lines
1.8 KiB
JavaScript

import { defineConfig } from "cypress";
import cypressSplit from "cypress-split";
import fs from "node:fs";
import { isAsyncFunction } from "node:util/types";
const isCI = process.env.CI === "true";
export default defineConfig({
video: isCI,
projectId: "j4yhox",
chromeWebSecurity: false,
viewportWidth: 1360,
viewportHeight: 768,
defaultCommandTimeout: 30000,
numTestsKeptInMemory: 30,
experimentalMemoryManagement: true,
retries: {
runMode: 3,
},
e2e: {
baseUrl: "http://localhost:8080",
slowTestThreshold: 30000,
specPattern: "cypress/e2e/**/*.{js,jsx,ts,tsx}",
setupNodeEvents(on, config) {
// after:spec collides with cypressSplit function below and is overridden there
function afterSpecRemoveSuccessfulVideos(spec, results) {
if (results?.video) {
// Do we have failures for any retry attempts?
const failures = results.tests.some((test) =>
test.attempts.some((attempt) => attempt.state === "failed"),
);
if (!failures) {
// delete the video if the spec passed and no tests retried
fs.unlinkSync(results.video);
}
}
}
function chainedOn(event, callback) {
if (event === "after:spec") {
if (isAsyncFunction(callback)) {
on(event, async (spec, results) => {
afterSpecRemoveSuccessfulVideos(spec, results);
await callback(spec, results);
});
} else {
on(event, (spec, results) => {
afterSpecRemoveSuccessfulVideos(spec, results);
callback(spec, results);
});
}
} else {
on(event, callback);
}
}
cypressSplit(chainedOn, config);
return config;
},
},
});