fix(review-gates): green success badges, null-safe preview rows, optional section items
- Extract shared statusBadgeClass() helper (src/viewers/statusBadge.ts) so SqlViewer, CteResultViewer and PhaseSummaryViewer can't drift: ok/success/ passed/promoted render green (--success), warn renders amber (--warning), error/failed stay destructive red, everything else stays neutral outline. Previously CteResultViewer/PhaseSummaryViewer mapped "ok"/"promoted" to the default badge variant, which is bg-primary (GSD red) — success states rendered red. - enrich.js: buildCteResultV2 now falls back preview.rows to [] instead of null when last_test.preview_rows is missing (pre-upgrade ok records), and CteResultViewer reads result.preview?.rows?.length with a null-safe fallback so it degrades to the "No preview rows" empty state instead of crashing. - PhaseSummaryViewer: section.items is optional (model-authored sections can be prose-only); render (section.items ?? []) instead of crashing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -76,6 +76,16 @@ test("shows empty-state when preview has no rows", async () => {
|
||||
expect(screen.getByText(/no preview rows/i)).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test("shows empty-state, no crash, when preview.rows is null (pre-upgrade records)", async () => {
|
||||
const nullRows = {
|
||||
...okResult,
|
||||
preview: { columns: ["paziente_id"], rows: null as unknown as (string | number)[][] },
|
||||
};
|
||||
render(<CteResultViewer result={nullRows} />);
|
||||
await screen.findByTestId("hl");
|
||||
expect(screen.getByText(/no preview rows/i)).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test("renders columns definition list with descriptions", async () => {
|
||||
const { container } = render(<CteResultViewer result={okResult} />);
|
||||
await screen.findByTestId("hl");
|
||||
|
||||
Reference in New Issue
Block a user