Skip to content

Commit 038e0df

Browse files
committed
feat: add formatTestPath helper for improved test path rendering
1 parent 08767b3 commit 038e0df

File tree

7 files changed

+87
-20
lines changed

7 files changed

+87
-20
lines changed

badges/coverage.svg

Lines changed: 1 addition & 1 deletion
Loading

dist/index.js

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/reports/github.hbs

Lines changed: 9 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/handlebars/helpers/ctrf.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,3 +317,40 @@ export function getGitHubIconHelper(): void {
317317
}
318318
)
319319
}
320+
321+
/**
322+
* Formats a test path by replacing spaces and ">" with GitHub arrow-right octoicon.
323+
* This makes test paths more readable in markdown.
324+
*
325+
* @example
326+
* In Handlebars:
327+
* {{formatTestPath "filename.ts > suiteone > suitetwo" "test name"}}
328+
* {{formatTestPath suite name}}
329+
*
330+
* @param {string} suite - The test suite path (may contain spaces or ">" as separators).
331+
* @param {string} name - The test name.
332+
* @returns {string} A formatted string with GitHub arrow-right icons between path segments.
333+
*/
334+
export function formatTestPathHelper(): void {
335+
Handlebars.registerHelper('formatTestPath', (suite: string, name: string) => {
336+
if (!suite) {
337+
return name
338+
}
339+
340+
const normalizedPath = suite
341+
.replace(/\s*>\s*/g, '|')
342+
.replace(/\s*>\s*/g, '|')
343+
.replace(/\s+/g, '|')
344+
345+
const parts = normalizedPath.split('|').filter(Boolean)
346+
347+
const formattedPath = parts
348+
.map(part => part.trim())
349+
.filter(Boolean)
350+
.join(' ![arrow-right](https://ctrf.io/assets/github/arrow-right.svg) ')
351+
352+
return new Handlebars.SafeString(
353+
`${formattedPath} ![arrow-right](https://ctrf.io/assets/github/arrow-right.svg) ${name}`
354+
)
355+
})
356+
}

src/handlebars/helpers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
formatDurationMsToHumanHelper,
1515
formatDurationStartStopToHumanHelper,
1616
formatRateHelper,
17+
formatTestPathHelper,
1718
getEmojiHelper,
1819
getGitHubIconHelper,
1920
LimitFailedTests,
@@ -57,4 +58,5 @@ export function registerAllHelpers(): void {
5758
anyFlakyTestsHelper()
5859
anyFailedTestsHelper()
5960
anySkippedTestsHelper()
61+
formatTestPathHelper()
6062
}

src/reports/github.hbs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
{{#each ctrf.tests}}
4848
{{#if (eq status "failed")}}
4949
{{#if suite}}
50-
{{suite}} > {{name}}
50+
{{formatTestPath suite name}}
5151

5252
{{else}}
5353
{{name}}
@@ -64,7 +64,7 @@
6464
{{#each ctrf.tests}}
6565
{{#if (eq flaky true)}}
6666
{{#if suite}}
67-
{{suite}} > {{name}}
67+
{{formatTestPath suite name}}
6868
{{else}}
6969
{{name}}
7070
{{/if}}
@@ -80,7 +80,7 @@
8080
{{#each ctrf.tests}}
8181
{{#if (eq status "skipped")}}
8282
{{#if suite}}
83-
{{suite}} > {{name}}
83+
{{formatTestPath suite name}}
8484
{{else}}
8585
{{name}}
8686
{{/if}}
@@ -96,7 +96,7 @@
9696
{{#each ctrf.tests}}
9797
{{#if (eq status "pending")}}
9898
{{#if suite}}
99-
{{suite}} > {{name}}
99+
{{formatTestPath suite name}}
100100
{{else}}
101101
{{name}}
102102
{{/if}}
@@ -112,7 +112,7 @@
112112
{{#each ctrf.tests}}
113113
{{#if (eq status "other")}}
114114
{{#if suite}}
115-
{{suite}} > {{name}}
115+
{{formatTestPath suite name}}
116116
{{else}}
117117
{{name}}
118118
{{/if}}

0 commit comments

Comments
 (0)