diff --git a/tests/unit/workflow-contract.test.mjs b/tests/unit/workflow-contract.test.mjs index e504889..9fdeffc 100644 --- a/tests/unit/workflow-contract.test.mjs +++ b/tests/unit/workflow-contract.test.mjs @@ -674,4 +674,28 @@ test("Pages is an explicit least-privilege add-on", () => { assert.ok(existsSync(join(root, ".github", "scripts", "pages-report", assetName)), `missing report script ${assetName}`); assert.match(pagesWorkflow, new RegExp(`\\.github/scripts/pages-report/${assetName.replace(".", "\\.")}`)); } +}); + +test("Pages report SVGs use theme colors in light and dark modes", () => { + const report = readFileSync(join(root, ".github", "scripts", "pages-report", "report.mjs"), "utf8"); + const darkTheme = report.match(/:root \{([\s\S]*?)\n\}/)?.[1]; + const lightTheme = report.match(/@media \(prefers-color-scheme: light\) \{\s*:root \{([\s\S]*?)\n \}/)?.[1]; + + assert.ok(darkTheme, "missing default dark theme"); + assert.ok(lightTheme, "missing light theme"); + + for (const [name, svgClass] of [ + ["success", "chart-successful"], + ["danger", "chart-failed"], + ["cancelled", "chart-cancelled"], + ]) { + const variable = new RegExp(`--${name}: #[0-9a-f]{6};`, "i"); + assert.match(darkTheme, variable); + assert.match(lightTheme, variable); + assert.match(report, new RegExp(`\\.${svgClass}\\s*\\{\\s*stroke:\\s*var\\(--${name}\\)`)); + } + + assert.match(report, /