testbeats
Version:
Publish test results to Microsoft Teams, Google Chat, Slack and InfluxDB
137 lines (131 loc) • 3.89 kB
JavaScript
/**
* Add Slack Extension function.
*
* @param {object} param0 - the payload object
* @param {object} param0.payload - the payload object
* @param {import("..").IExtension} param0.extension - the extension to add
* @param {string} param0.text - the text to include
* @return {void}
*/
function addSlackExtension({ payload, extension, text }) {
if (extension.inputs.separator) {
payload.blocks.push({
"type": "divider"
});
}
let updated_text = text;
if (extension.inputs.title) {
const title = extension.inputs.title_link ? `<${extension.inputs.title_link}|${extension.inputs.title}>` : extension.inputs.title;
updated_text = `*${title}*\n\n${text}`;
}
if (extension.inputs.block_type === 'context') {
payload.blocks.push({
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": updated_text
}
]
});
} else {
payload.blocks.push({
"type": "section",
"text": {
"type": "mrkdwn",
"text": updated_text
}
});
}
}
/**
* Add Teams Extension function.
*
* @param {object} param0 - the payload object
* @param {object} param0.payload - the payload object
* @param {import("..").IExtension} param0.extension - the extension to add
* @param {string} param0.text - the text to include
* @return {void}
*/
function addTeamsExtension({ payload, extension, text }) {
if (extension.inputs.title) {
const title = extension.inputs.title_link ? `[${extension.inputs.title}](${extension.inputs.title_link})` : extension.inputs.title
payload.body.push({
"type": "TextBlock",
"text": title,
"isSubtle": true,
"weight": "bolder",
"separator": extension.inputs.separator,
"wrap": true
});
payload.body.push({
"type": "TextBlock",
"text": text,
"wrap": true
});
} else {
payload.body.push({
"type": "TextBlock",
"text": text,
"wrap": true,
"separator": extension.inputs.separator
});
}
}
/**
* Add Chat Extension function.
*
* @param {object} param0 - the payload object
* @param {object} param0.payload - the payload object
* @param {import("..").IExtension} param0.extension - the extension to add
* @param {string} param0.text - the text to include
* @return {void}
*/
function addChatExtension({ payload, extension, text }) {
let updated_text = text;
if (extension.inputs.title) {
const title = extension.inputs.title_link ? `<a href="${extension.inputs.title_link}">${extension.inputs.title}</a>` : extension.inputs.title;
updated_text = `<b>${title}</b><br><br>${text}`;
}
payload.sections.push({
"widgets": [
{
"textParagraph": {
"text": updated_text
}
}
]
});
}
function addGithubExtension({ payload, extension, text }) {
if (extension.inputs.title) {
const title = extension.inputs.title_link ? `[${extension.inputs.title}](${extension.inputs.title_link})` : extension.inputs.title;
payload.content.push(`**${title}**\n${text}\n\n`);
} else {
payload.content.push(`${text}\n\n`);
}
}
/**
* Sort extensions by their order property.
* Extensions without order will appear last, maintaining their original relative order.
*
* @param {import("..").IExtension[]} extensions - the extensions array to sort
* @return {import("..").IExtension[]} sorted extensions array
*/
function sortExtensionsByOrder(extensions) {
if (!extensions || !Array.isArray(extensions)) {
return extensions;
}
return extensions.slice().sort((a, b) => {
const orderA = typeof a.order === 'number' ? a.order : 1000;
const orderB = typeof b.order === 'number' ? b.order : 1000;
return orderA - orderB;
});
}
module.exports = {
addSlackExtension,
addTeamsExtension,
addChatExtension,
addGithubExtension,
sortExtensionsByOrder
}