Merge pull request #645 from micmarc/fix/report-title-short-summary
Some checks are pending
Check dist/ / check-dist (push) Waiting to run
CI / Build & Test (push) Waiting to run

This commit is contained in:
Jozef Izso 2025-11-14 20:00:35 +01:00 committed by GitHub
commit e2f0ff6339
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 77 additions and 24 deletions

View file

@ -303,4 +303,47 @@ describe('jest-junit tests', () => {
expect(report).not.toContain('<details><summary>Expand for details</summary>')
expect(report).not.toContain('</details>')
})
it('report includes the short summary', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const opts: ParseOptions = {
parseErrors: true,
trackedFiles: []
}
const parser = new JestJunitParser(opts)
const result = await parser.parse(filePath, fileContent)
const shortSummary = '1 passed, 4 failed and 1 skipped'
const report = getReport([result], DEFAULT_OPTIONS, shortSummary)
// Report should have the title as the first line
expect(report).toMatch(/^## 1 passed, 4 failed and 1 skipped\n/)
})
it('report includes a custom report title and short summary', async () => {
const fixturePath = path.join(__dirname, 'fixtures', 'jest-junit.xml')
const filePath = normalizeFilePath(path.relative(__dirname, fixturePath))
const fileContent = fs.readFileSync(fixturePath, {encoding: 'utf8'})
const opts: ParseOptions = {
parseErrors: true,
trackedFiles: []
}
const parser = new JestJunitParser(opts)
const result = await parser.parse(filePath, fileContent)
const shortSummary = '1 passed, 4 failed and 1 skipped'
const report = getReport(
[result],
{
...DEFAULT_OPTIONS,
reportTitle: 'My Custom Title'
},
shortSummary
)
// Report should have the title as the first line
expect(report).toMatch(/^# My Custom Title\n## 1 passed, 4 failed and 1 skipped\n/)
})
})

15
dist/index.js generated vendored
View file

@ -422,10 +422,9 @@ class TestReporter {
badgeTitle,
reportTitle,
collapsed
});
}, shortSummary);
core.info('Summary content:');
core.info(summary);
core.summary.addRaw(`# ${shortSummary}`);
await core.summary.addRaw(summary).write();
}
else {
@ -1934,11 +1933,10 @@ exports.DEFAULT_OPTIONS = {
reportTitle: '',
collapsed: 'auto'
};
function getReport(results, options = exports.DEFAULT_OPTIONS) {
core.info('Generating check run summary');
function getReport(results, options = exports.DEFAULT_OPTIONS, shortSummary = '') {
applySort(results);
const opts = { ...options };
let lines = renderReport(results, opts);
let lines = renderReport(results, opts, shortSummary);
let report = lines.join('\n');
if (getByteLength(report) <= getMaxReportLength(options)) {
return report;
@ -1946,7 +1944,7 @@ function getReport(results, options = exports.DEFAULT_OPTIONS) {
if (opts.listTests === 'all') {
core.info("Test report summary is too big - setting 'listTests' to 'failed'");
opts.listTests = 'failed';
lines = renderReport(results, opts);
lines = renderReport(results, opts, shortSummary);
report = lines.join('\n');
if (getByteLength(report) <= getMaxReportLength(options)) {
return report;
@ -1993,12 +1991,15 @@ function applySort(results) {
function getByteLength(text) {
return Buffer.byteLength(text, 'utf8');
}
function renderReport(results, options) {
function renderReport(results, options, shortSummary) {
const sections = [];
const reportTitle = options.reportTitle.trim();
if (reportTitle) {
sections.push(`# ${reportTitle}`);
}
if (shortSummary) {
sections.push(`## ${shortSummary}`);
}
const badge = getReportBadge(results, options);
sections.push(badge);
const runs = getTestRunsReport(results, options);

View file

@ -181,7 +181,9 @@ class TestReporter {
let baseUrl = ''
if (this.useActionsSummary) {
const summary = getReport(results, {
const summary = getReport(
results,
{
listSuites,
listTests,
baseUrl,
@ -190,11 +192,12 @@ class TestReporter {
badgeTitle,
reportTitle,
collapsed
})
},
shortSummary
)
core.info('Summary content:')
core.info(summary)
core.summary.addRaw(`# ${shortSummary}`)
await core.summary.addRaw(summary).write()
} else {
core.info(`Creating check run ${name}`)

View file

@ -30,13 +30,15 @@ export const DEFAULT_OPTIONS: ReportOptions = {
collapsed: 'auto'
}
export function getReport(results: TestRunResult[], options: ReportOptions = DEFAULT_OPTIONS): string {
core.info('Generating check run summary')
export function getReport(
results: TestRunResult[],
options: ReportOptions = DEFAULT_OPTIONS,
shortSummary = ''
): string {
applySort(results)
const opts = {...options}
let lines = renderReport(results, opts)
let lines = renderReport(results, opts, shortSummary)
let report = lines.join('\n')
if (getByteLength(report) <= getMaxReportLength(options)) {
@ -46,7 +48,7 @@ export function getReport(results: TestRunResult[], options: ReportOptions = DEF
if (opts.listTests === 'all') {
core.info("Test report summary is too big - setting 'listTests' to 'failed'")
opts.listTests = 'failed'
lines = renderReport(results, opts)
lines = renderReport(results, opts, shortSummary)
report = lines.join('\n')
if (getByteLength(report) <= getMaxReportLength(options)) {
return report
@ -103,7 +105,7 @@ function getByteLength(text: string): number {
return Buffer.byteLength(text, 'utf8')
}
function renderReport(results: TestRunResult[], options: ReportOptions): string[] {
function renderReport(results: TestRunResult[], options: ReportOptions, shortSummary: string): string[] {
const sections: string[] = []
const reportTitle: string = options.reportTitle.trim()
@ -111,6 +113,10 @@ function renderReport(results: TestRunResult[], options: ReportOptions): string[
sections.push(`# ${reportTitle}`)
}
if (shortSummary) {
sections.push(`## ${shortSummary}`)
}
const badge = getReportBadge(results, options)
sections.push(badge)