aiotests-playwright-reporter
Version:
AIO Tests reporter for reporting results from Playwright to AIO Tests
87 lines (77 loc) • 2.49 kB
text/typescript
import type {
Reporter,
FullConfig,
Suite,
TestCase,
TestResult,
FullResult,
TestError,
} from "@playwright/test/reporter";
import { reportTestResults, validateAIOConfig } from "./aio-utils";
import { AioConfig, TestData } from "./model";
import AioTestsLogger from "./AioTestsLogger";
import aioTestsLogger from "./AioTestsLogger";
class AioReporter implements Reporter {
static start = true;
static end = true;
aioConfig: AioConfig | undefined;
testSummary: TestData[] = [];
customOption: any;
multiBrowser = false;
multiBrowserRetry: Map<string, number> = new Map<string, number>();
constructor(options: { aioConfig?: AioConfig } = {}) {
this.customOption = options;
}
onBegin(config: FullConfig, suite: Suite) {
for (const project of config.projects) {
this.multiBrowserRetry.set(project.name, project.retries);
}
if (AioReporter.start) {
AioTestsLogger.logStartEnd("AIO Tests Playwright Reporter - Reporting results - test 2");
AioReporter.start = false;
}
if (this.customOption.aioConfig == null || this.customOption.aioConfig == undefined) {
AioTestsLogger.error("AIO config is not defined.");
return;
}
this.aioConfig = validateAIOConfig(this.customOption.aioConfig, true);
if (!this.aioConfig) {
return;
}
if (suite.entries().length > 1) {
this.multiBrowser = true;
}
}
onTestBegin(test: TestCase) {}
onTestEnd(test: TestCase, result: TestResult) {
// @ts-ignore
if(!this.aioConfig?.createNewRunForRetries && result.status != 'passed' && result.retry < this.multiBrowserRetry.get(test._projectId)! )
return;
let pattern = new RegExp("\\w+-TC-\\d+", "gi");
let match;
test.tags.forEach((tag) => {
do {
match = pattern.exec(tag);
if (match) {
this.testSummary.push({ test: test, result: result });
break;
}
} while (match != null);
});
}
onEnd(result: FullResult) {}
async onExit(): Promise<void> {
if (this.aioConfig) {
await reportTestResults(this.aioConfig, this.testSummary, this.multiBrowser);
}
if (AioReporter.end) {
AioTestsLogger.logStartEnd("AIO Tests Playwright Reporter - Reporting results completed");
AioReporter.end = false;
}
return Promise.resolve();
}
onError(error: TestError): void {
AioTestsLogger.error(error.message || "Playwright error occurred.");
}
}
export default AioReporter;