apps/meteor/reporters/rocketchat.ts
import type { Reporter, TestCase, TestResult } from '@playwright/test/reporter';
import fetch from 'node-fetch';
class RocketChatReporter implements Reporter {
private url: string;
private apiKey: string;
private branch: string;
private draft: boolean;
private run: number;
constructor(options: { url: string; apiKey: string; branch: string; draft: boolean; run: number }) {
this.url = options.url;
this.apiKey = options.apiKey;
this.branch = options.branch;
this.draft = options.draft;
this.run = options.run;
}
async onTestEnd(test: TestCase, result: TestResult) {
if (process.env.REPORTER_ROCKETCHAT_REPORT !== 'true') {
console.log('REPORTER_ROCKETCHAT_REPORT is not true, skipping', {
draft: this.draft,
branch: this.branch,
});
return;
}
const payload = {
name: test.title,
status: result.status,
duration: result.duration,
branch: this.branch,
draft: this.draft,
run: this.run,
};
try {
const res = await fetch(this.url, {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json',
'X-Api-Key': this.apiKey,
},
});
if (!res.ok) {
console.error('Error sending test result to Rocket.Chat', JSON.stringify(payload), res);
}
} catch (error) {
console.error('Unknown error while sending test result to Rocket.Chat', JSON.stringify(payload), error);
}
}
}
export default RocketChatReporter;