Skip to content

Commit 48db1d3

Browse files
refactor: update Slack message when tests are failed
1 parent fce8e8e commit 48db1d3

File tree

1 file changed

+65
-51
lines changed

1 file changed

+65
-51
lines changed

sanity-report-dev11.js

Lines changed: 65 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,88 @@
1-
const dotenv = require('dotenv')
2-
const fs = require('fs')
1+
import Slack from "@slack/bolt";
2+
const { App } = Slack;
3+
import dotenv from "dotenv";
4+
import fs from "fs";
35

4-
dotenv.config()
6+
dotenv.config();
57

6-
const user1 = process.env.USER1
7-
const user2 = process.env.USER2
8-
const user3 = process.env.USER3
9-
const user4 = process.env.USER4
8+
const user1 = process.env.USER1;
9+
const user2 = process.env.USER2;
10+
const user3 = process.env.USER3;
11+
const user4 = process.env.USER4;
1012

1113
const mochawesomeJsonOutput = fs.readFileSync(
12-
'./mochawesome-report/mochawesome.json',
13-
'utf-8'
14-
)
15-
const mochawesomeReport = JSON.parse(mochawesomeJsonOutput)
14+
"./mochawesome-report/mochawesome.json",
15+
"utf-8"
16+
);
17+
const mochawesomeReport = JSON.parse(mochawesomeJsonOutput);
1618

17-
const totalTests = mochawesomeReport.stats.tests
18-
const passedTests = mochawesomeReport.stats.passes
19-
const failedTests = mochawesomeReport.stats.failures
19+
const totalTests = mochawesomeReport.stats.tests;
20+
const passedTests = mochawesomeReport.stats.passes;
21+
const failedTests = mochawesomeReport.stats.failures;
2022

21-
let durationInSeconds = Math.floor(mochawesomeReport.stats.duration / 1000)
22-
const durationInMinutes = Math.floor(durationInSeconds / 60)
23-
durationInSeconds %= 60
23+
let durationInSeconds = Math.floor(mochawesomeReport.stats.duration / 1000);
24+
const durationInMinutes = Math.floor(durationInSeconds / 60);
25+
durationInSeconds %= 60;
2426

2527
const resultMessage =
2628
passedTests === totalTests
2729
? `:white_check_mark: Success (${passedTests} / ${totalTests} Passed)`
28-
: `:x: Failure (${passedTests} / ${totalTests} Passed)`
30+
: `:x: Failure (${passedTests} / ${totalTests} Passed)`;
2931

30-
const pipelineName = process.env.GO_PIPELINE_NAME
31-
const pipelineCounter = process.env.GO_PIPELINE_COUNTER
32-
const goCdServer = process.env.GOCD_SERVER
32+
const pipelineName = process.env.GO_PIPELINE_NAME;
33+
const pipelineCounter = process.env.GO_PIPELINE_COUNTER;
34+
const goCdServer = process.env.GOCD_SERVER;
3335

34-
const reportUrl = `http://${goCdServer}/go/files/${pipelineName}/${pipelineCounter}/sanity/1/sanity/test-results/mochawesome-report/sanity-report.html`
36+
const reportUrl = `http://${goCdServer}/go/files/${pipelineName}/${pipelineCounter}/sanity/1/sanity/test-results/mochawesome-report/sanity-report.html`;
3537

36-
let tagUsers = ``
37-
if (failedTests > 0) {
38-
tagUsers = `<@${user1}> <@${user2}> <@${user3}> <@${user4}>`
39-
}
38+
let tagUsers =
39+
failedTests > 0 ? `<@${user1}> <@${user2}> <@${user3}> <@${user4}>` : "";
4040

4141
const slackMessage = {
42-
text: `Dev11, SDK-CMA Sanity
43-
*Result:* ${resultMessage}. ${durationInMinutes}m ${durationInSeconds}s
44-
*Failed Tests:* ${failedTests}
45-
<${reportUrl}|View Report>
46-
${tagUsers}`
47-
}
42+
text: `Dev11, SDK-CMA Sanity\n*Result:* ${resultMessage}. ${durationInMinutes}m ${durationInSeconds}s\n*Failed Tests:* ${failedTests}\n<${reportUrl}|View Report>\n${tagUsers}`,
43+
};
4844

49-
const slackWebhookUrl = process.env.SLACK_WEBHOOK_URL
45+
const app = new App({
46+
token: process.env.SLACK_BOT_TOKEN,
47+
signingSecret: process.env.SLACK_SIGNING_SECRET,
48+
});
5049

5150
const sendSlackMessage = async (message) => {
52-
const payload = {
53-
text: message
54-
}
55-
5651
try {
57-
const response = await fetch(slackWebhookUrl, {
58-
method: 'POST',
59-
headers: {
60-
'Content-Type': 'application/json'
61-
},
62-
body: JSON.stringify(payload)
63-
})
64-
65-
if (!response.ok) {
66-
throw new Error(`Error sending message to Slack: ${response.statusText}`)
52+
const result = await app.client.chat.postMessage({
53+
token: process.env.SLACK_BOT_TOKEN,
54+
channel: process.env.SLACK_CHANNEL,
55+
text: message,
56+
});
57+
58+
if (failedTests > 0) {
59+
await sendFailureDetails(result.ts);
6760
}
61+
} catch (error) {
62+
console.error("Error sending Slack message:", error);
63+
}
64+
};
6865

69-
console.log('Message sent to Slack successfully')
66+
const sendFailureDetails = async (threadTs) => {
67+
const failedSuites = mochawesomeReport.results
68+
.flatMap((result) => result.suites)
69+
.filter((suite) => suite.failures.length > 0);
70+
71+
let failureDetails = "*Failed Test Modules:*\n";
72+
for (const suite of failedSuites) {
73+
failureDetails += `- *${suite.title}*: ${suite.failures.length} failed\n`;
74+
}
75+
76+
try {
77+
await app.client.chat.postMessage({
78+
token: process.env.SLACK_BOT_TOKEN,
79+
channel: process.env.SLACK_CHANNEL,
80+
text: failureDetails,
81+
thread_ts: threadTs,
82+
});
7083
} catch (error) {
71-
console.error('Error:', error)
84+
console.error("Error sending failure details:", error);
7285
}
73-
}
74-
sendSlackMessage(slackMessage.text)
86+
};
87+
88+
sendSlackMessage(slackMessage.text);

0 commit comments

Comments
 (0)