import { createElement } from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; import { readFileSync } from 'node:fs'; import { describe, expect, it } from 'vitest'; import { LinkedResults } from '../../src/features/linked-results/LinkedResults'; import { makeSheet } from '../../src/importers/sheet-factory'; describe('LinkedResults', () => { it('verwendet getrennte Soll- und Verstossfarben fuer Belegzeilen', () => { const styles = readFileSync(new URL('../../src/styles/components.css', import.meta.url), 'utf8'); expect(styles).toMatch(/\.rich-text-table tr\.rich-text-table-row--criterion td\s*\{[^}]*background:\s*var\(--criterion-highlight-bg\);/s); expect(styles).toMatch(/\.rich-text-table tr\.rich-text-table-row--violation td\s*\{[^}]*background:\s*var\(--violation-highlight-bg\);/s); }); it('haelt Ergebnisabschnitte ohne platzraubenden Aussenkasten', () => { const styles = readFileSync(new URL('../../src/styles/components.css', import.meta.url), 'utf8'); const rule = /\.result-block\s*\{([^}]*)\}/.exec(styles)?.[1] ?? ''; expect(rule).toContain('padding: 0'); expect(rule).toContain('border: 0'); expect(rule).toContain('background: transparent'); }); // Maester liefert statt einer verknuepfbaren Ergebnisdatei nur einen // Ergebnistext (siehe `resultMessageFor`). Ohne eigene Darstellung erschien // hier bislang der irrefuehrende Hinweis "Keine passende Ergebnisdatei // automatisch gefunden.", obwohl der eigentliche Befund vorliegt. it('zeigt den werkzeuggebundenen Ergebnistext, wenn keine Ergebnisdatei verknuepft ist', () => { const html = renderToStaticMarkup(createElement(LinkedResults, { sheets: [], sections: [{ title: 'Test result', value: 'No conditional access policy securing security info registration.' }] })); expect(html).toContain('No conditional access policy securing security info registration.'); expect(html).not.toContain('Keine passende Ergebnisdatei automatisch gefunden.'); }); it('zeigt weiterhin den Nicht-gefunden-Hinweis, wenn weder Ergebnisdatei noch Ergebnistext vorliegen', () => { const html = renderToStaticMarkup(createElement(LinkedResults, { sheets: [] })); expect(html).toContain('No matching result file found automatically.'); }); /** * Regression: Der Ergebnistext wurde als reiner Text ausgegeben. Maester * liefert darin Ueberschriften, Aufzaehlungen, Verweise und ganze Tabellen - * sie standen dadurch woertlich als Rauten, Sternchen und Pipe-Ketten in der * Oberflaeche. */ it('wertet den Ergebnistext als Markdown aus statt ihn woertlich auszugeben', () => { const html = renderToStaticMarkup(createElement(LinkedResults, { sheets: [], sections: [{ title: 'Test result', value: 'You have 2 users without MFA. #### Impacted resources ' + '| Status | Name | | --- | --- | | Fail | [tyler@example.invalid](https://example.invalid/a) | ' + '| Fail | ann@example.invalid |' }] })); expect(html).toContain('