diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index 43bd333c..5af3fd9f 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -271,16 +271,17 @@ export default class Test extends AuthCommand { }, links)) }) - runner.on(Events.CHECK_SUCCESSFUL, (sequenceId: SequenceId, check, result, links?: TestResultsShortLinks) => { - if (result.hasFailures) { - process.exitCode = 1 - } + runner.on(Events.CHECK_SUCCESSFUL, + (sequenceId: SequenceId, check, result, testResultId, links?: TestResultsShortLinks) => { + if (result.hasFailures) { + process.exitCode = 1 + } - reporters.forEach(r => r.onCheckEnd(sequenceId, { - logicalId: check.logicalId, - sourceFile: check.getSourceFile(), - ...result, - }, links)) + reporters.forEach(r => r.onCheckEnd(sequenceId, { + logicalId: check.logicalId, + sourceFile: check.getSourceFile(), + ...result, + }, testResultId, links)) }) runner.on(Events.CHECK_FAILED, (sequenceId: SequenceId, check, message: string) => { reporters.forEach(r => r.onCheckEnd(sequenceId, { diff --git a/packages/cli/src/commands/trigger.ts b/packages/cli/src/commands/trigger.ts index 4c69fb07..ca00dbf5 100644 --- a/packages/cli/src/commands/trigger.ts +++ b/packages/cli/src/commands/trigger.ts @@ -143,12 +143,13 @@ export default class Trigger extends AuthCommand { runner.on(Events.CHECK_ATTEMPT_RESULT, (sequenceId: SequenceId, check, result, links?: TestResultsShortLinks) => { reporters.forEach(r => r.onCheckAttemptResult(sequenceId, result, links)) }) - runner.on(Events.CHECK_SUCCESSFUL, (sequenceId: SequenceId, _, result, links?: TestResultsShortLinks) => { - if (result.hasFailures) { - process.exitCode = 1 - } - reporters.forEach(r => r.onCheckEnd(sequenceId, result, links)) - }) + runner.on(Events.CHECK_SUCCESSFUL, + (sequenceId: SequenceId, _, result, testResultId, links?: TestResultsShortLinks) => { + if (result.hasFailures) { + process.exitCode = 1 + } + reporters.forEach(r => r.onCheckEnd(sequenceId, result, testResultId, links)) + }) runner.on(Events.CHECK_FAILED, (sequenceId: SequenceId, check, message: string) => { reporters.forEach(r => r.onCheckEnd(sequenceId, { ...check, diff --git a/packages/cli/src/reporters/abstract-list.ts b/packages/cli/src/reporters/abstract-list.ts index 65067169..d93d2542 100644 --- a/packages/cli/src/reporters/abstract-list.ts +++ b/packages/cli/src/reporters/abstract-list.ts @@ -17,6 +17,7 @@ export type checkFilesMap = Map> @@ -80,10 +81,11 @@ export default abstract class AbstractListReporter implements Reporter { checkFile.numRetries++ } - onCheckEnd (sequenceId: SequenceId, checkResult: any, links?: TestResultsShortLinks) { + onCheckEnd (sequenceId: SequenceId, checkResult: any, testResultId?: string, links?: TestResultsShortLinks) { const checkStatus = this.checkFilesMap!.get(checkResult.sourceFile)!.get(sequenceId)! checkStatus.result = checkResult checkStatus.links = links + checkStatus.testResultId = testResultId checkStatus.checkStatus = checkResult.hasFailures ? CheckStatus.FAILED : CheckStatus.SUCCESSFUL checkStatus.titleString = formatCheckTitle(checkStatus.checkStatus, checkResult, { includeSourceFile: false, diff --git a/packages/cli/src/reporters/github.ts b/packages/cli/src/reporters/github.ts index c3a4867e..c48fa1bd 100644 --- a/packages/cli/src/reporters/github.ts +++ b/packages/cli/src/reporters/github.ts @@ -63,7 +63,7 @@ export class GithubMdBuilder { } for (const [_, checkMap] of this.checkFilesMap.entries()) { - for (const [_, { result, links }] of checkMap.entries()) { + for (const [_, { result, testResultId }] of checkMap.entries()) { const tableRow: Array = [ `${result.hasFailures ? '❌ Fail' : '✅ Pass'}`, `${result.name}`, @@ -72,8 +72,8 @@ export class GithubMdBuilder { `${formatDuration(result.responseTime)} `, ].filter(nonNullable) - if (links?.testResultLink) { - const linkColumn = `[Full test report](${links?.testResultLink})` + if (this.testSessionId && testResultId) { + const linkColumn = `[Full test report](${getTestSessionUrl(this.testSessionId)}/results/${testResultId})` tableRow.push(linkColumn) } diff --git a/packages/cli/src/reporters/json.ts b/packages/cli/src/reporters/json.ts index d96544da..d711157e 100644 --- a/packages/cli/src/reporters/json.ts +++ b/packages/cli/src/reporters/json.ts @@ -3,7 +3,7 @@ import * as path from 'path' import AbstractListReporter, { checkFilesMap } from './abstract-list' import { CheckRunId, SequenceId } from '../services/abstract-check-runner' -import { printLn } from './util' +import { printLn, getTestSessionUrl } from './util' const outputFile = './checkly-json-report.json' @@ -40,7 +40,7 @@ export class JsonBuilder { // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const [_, checkMap] of this.checkFilesMap.entries()) { // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const [_, { result, links, numRetries }] of checkMap.entries()) { + for (const [_, { result, testResultId, numRetries }] of checkMap.entries()) { const check: any = { result: result.hasFailures ? 'Fail' : 'Pass', name: result.name, @@ -56,8 +56,8 @@ export class JsonBuilder { check.filename = result.sourceFile } - if (links?.testResultLink) { - check.link = links?.testResultLink + if (this.testSessionId && testResultId) { + check.link = `${getTestSessionUrl(this.testSessionId)}/results/${testResultId}` } testSessionSummary.checks.push(check) diff --git a/packages/cli/src/reporters/list.ts b/packages/cli/src/reporters/list.ts index e93842e2..00c318ff 100644 --- a/packages/cli/src/reporters/list.ts +++ b/packages/cli/src/reporters/list.ts @@ -53,8 +53,8 @@ export default class ListReporter extends AbstractListReporter { this._printSummary() } - onCheckEnd (sequenceId: SequenceId, checkResult: any, links?: TestResultsShortLinks) { - super.onCheckEnd(sequenceId, checkResult) + onCheckEnd (sequenceId: SequenceId, checkResult: any, testResultId?: string, links?: TestResultsShortLinks) { + super.onCheckEnd(sequenceId, checkResult, testResultId, links) this._clearSummary() if (this.verbose) { diff --git a/packages/cli/src/reporters/reporter.ts b/packages/cli/src/reporters/reporter.ts index b9112d5c..c3b32a65 100644 --- a/packages/cli/src/reporters/reporter.ts +++ b/packages/cli/src/reporters/reporter.ts @@ -10,7 +10,7 @@ export interface Reporter { onBegin(checks: Array<{ check: any, sequenceId: SequenceId }>, testSessionId?: string): void; onCheckInProgress(check: any, sequenceId: SequenceId): void; onCheckAttemptResult(sequenceId: SequenceId, checkResult: any, links?: TestResultsShortLinks): void; - onCheckEnd(sequenceId: SequenceId, checkResult: any, links?: TestResultsShortLinks): void; + onCheckEnd(sequenceId: SequenceId, checkResult: any, testResultId?: string, links?: TestResultsShortLinks): void; onEnd(): void; onError(err: Error): void, onSchedulingDelayExceeded(): void diff --git a/packages/cli/src/services/abstract-check-runner.ts b/packages/cli/src/services/abstract-check-runner.ts index 20228ba6..fe81af15 100644 --- a/packages/cli/src/services/abstract-check-runner.ts +++ b/packages/cli/src/services/abstract-check-runner.ts @@ -151,7 +151,7 @@ export default abstract class AbstractCheckRunner extends EventEmitter { const links = testResultId && result.hasFailures && await this.getShortLinks(testResultId) if (resultType === 'FINAL') { this.disableTimeout(sequenceId) - this.emit(Events.CHECK_SUCCESSFUL, sequenceId, check, result, links) + this.emit(Events.CHECK_SUCCESSFUL, sequenceId, check, result, testResultId, links) this.emit(Events.CHECK_FINISHED, check) } else if (resultType === 'ATTEMPT') { this.emit(Events.CHECK_ATTEMPT_RESULT, sequenceId, check, result, links)