pactum-flow-plugin
Version:
plugin to publish flows, interactions and run contract tests locally
90 lines (82 loc) • 2.91 kB
JavaScript
const { bold, red, green, magenta, gray, yellow } = require('kleur');
const config = require('./config');
const store = require('./store');
const { waitForJobToFinish, getQualityGateStatus, verifyCompatibility, verifyQualityGateStatus} = require('./clients/flow')
function check(results) {
let allPassed = true;
const envs = new Set(getEnvironments(results.map(result => result.environment)));
for (let i = 0; i < results.length; i++) {
const result = results[i];
if (envs.has(result.environment)) {
console.log();
console.log(`Quality Gate Status in environment "${result.environment}" is "${result.status}"`);
if (result.status !== 'OK') {
allPassed = false;
}
printCompatibilityResults(result.consumers, 'Consumer');
printCompatibilityResults(result.providers, 'Provider')
}
}
if (!allPassed) {
throw 'Quality Gate Status Failed';
}
}
function printCompatibilityResults(results, result_type) {
const space = ' ';
console.log(gray(`${result_type} Results`));
if (results.length === 0) {
console.log(space + yellow('!') + ` No ${result_type} Results Found`);
}
for(let i = 0; i < results.length; i++) {
const result = results[i];
if (result.status === 'FAILED' || result.status === 'ERROR') {
console.log(space + red('X') + ` ${result.name} ${result.version}`);
const more_space = space + space;
if (result.status === 'ERROR') {
console.log(more_space + result.message);
} else {
const exceptions = result.exceptions;
for(let j = 0; j < exceptions.length; j++) {
const exception = exceptions[j];
console.log(more_space + exception.flow);
console.log(more_space + magenta('↪ ') + exception.error);
}
}
} else {
console.log(space + green('✓') + ` ${result.name} ${result.version}`);
}
}
}
function print() {
console.log();
console.log(bold().underline().cyan(`Checking Quality Gate of "${config.projectId}"`));
console.log();
}
function getEnvironments(default_envs = []) {
let envs = config.checkQualityGateEnvironments;
if (typeof config.checkQualityGateEnvironments === 'string') {
if (config.checkQualityGateEnvironments) {
envs = config.checkQualityGateEnvironments.split(',');
} else {
envs = default_envs;
}
}
return envs;
}
function checkQualityGate(results) {
if (!config.checkQualityGate) {
return;
}
print();
check(results);
}
async function getQualityGateResults() {
if (config.checkQualityGateLocal) {
const results = await verifyCompatibility(store.getFlows(), store.getInteractions(), getEnvironments());
return await verifyQualityGateStatus(results, getEnvironments());
} else {
await waitForJobToFinish();
return await getQualityGateStatus();
}
}
module.exports = { checkQualityGate, getQualityGateResults };