testbeats
Version:
Publish test results to Microsoft Teams, Google Chat, Slack and InfluxDB
107 lines (96 loc) • 3.41 kB
JavaScript
const { getSuiteHistory, getLastLaunchByName, getLaunchDetails } = require('../helpers/report-portal');
const { addChatExtension, addSlackExtension, addTeamsExtension } = require('../helpers/extension.helper');
const { HOOK, STATUS } = require('../helpers/constants');
const logger = require('../utils/logger');
async function getLaunchHistory(extension) {
const { inputs, outputs } = extension;
if (!inputs.launch_id && inputs.launch_name) {
const launch = await getLastLaunchByName(inputs);
outputs.launch = launch;
inputs.launch_id = launch.id;
}
if (typeof inputs.launch_id === 'string') {
const launch = await getLaunchDetails(inputs);
outputs.launch = launch;
inputs.launch_id = launch.id;
}
const response = await getSuiteHistory(inputs);
if (response.content.length > 0) {
outputs.history = response.content[0].resources;
return response.content[0].resources;
}
return [];
}
function getSymbols({ target, extension, launches }) {
const symbols = [];
for (let i = 0; i < launches.length; i++) {
const launch = launches[i];
const launch_url = `${extension.inputs.url}/ui/#${extension.inputs.project}/launches/all/${launch[extension.inputs.link_history_via]}`;
let current_symbol = '⚠️';
if (launch.status === 'PASSED') {
current_symbol = '✅';
} else if (launch.status === 'FAILED') {
current_symbol = '❌';
}
if (target.name === 'teams') {
symbols.push(`[${current_symbol}](${launch_url})`);
} else if (target.name === 'slack') {
symbols.push(`<${launch_url}|${current_symbol}>`);
} else if (target.name === 'chat') {
symbols.push(`<a href="${launch_url}">${current_symbol}</a>`);
} else {
symbols.push(current_symbol);
}
}
return symbols;
}
function setTitle(extension, symbols) {
if (extension.inputs.title === 'Last Runs') {
extension.inputs.title = `Last ${symbols.length} Runs`
}
}
async function run({ extension, target, payload }) {
try {
extension.inputs = Object.assign({}, default_inputs, extension.inputs);
const launches = await getLaunchHistory(extension);
const symbols = getSymbols({ target, extension, launches });
if (symbols.length > 0) {
setTitle(extension, symbols);
if (target.name === 'teams') {
extension.inputs = Object.assign({}, default_inputs_teams, extension.inputs);
addTeamsExtension({ payload, extension, text: symbols.join(' ') });
} else if (target.name === 'slack') {
extension.inputs = Object.assign({}, default_inputs_slack, extension.inputs);
addSlackExtension({ payload, extension, text: symbols.join(' ') });
} else if (target.name === 'chat') {
extension.inputs = Object.assign({}, default_inputs_chat, extension.inputs);
addChatExtension({ payload, extension, text: symbols.join(' ') });
}
}
} catch (error) {
logger.error(`Failed to get report portal history: ${error.message}`);
logger.debug(`Error: ${error}`);
}
}
const default_inputs = {
history_depth: 5,
title: 'Last Runs',
link_history_via: 'uuid'
}
const default_inputs_teams = {
separator: true
}
const default_inputs_chat = {
separator: true
}
const default_inputs_slack = {
separator: false
}
const default_options = {
hook: HOOK.END,
condition: STATUS.FAIL
}
module.exports = {
run,
default_options
}