From 86534f738ada6fe0395461f2e5f8ac7d831ffdf3 Mon Sep 17 00:00:00 2001 From: SJCoetz Date: Mon, 3 Aug 2026 16:43:59 +0200 Subject: [PATCH] test(stock-orders): tighten download-button assertions + mark icons decorative Two review follow-ups from the code-quality reviewer: - Switch the two new PDF-button tests from getByTestId to getByRole('link', { name }) so visible-label regressions fail. Add a rel='noopener' assertion so the security contract on target='_blank' is locked down. - Add aria-hidden='true' to both icons. The visible text already supplies each link's accessible name, but marking the icon decorative explicitly is more robust to future library behavior changes. Co-authored-by: Orca --- src/app/(app)/stock-orders/StockOrdersTable.test.tsx | 10 ++++------ src/app/(app)/stock-orders/StockOrdersTable.tsx | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/app/(app)/stock-orders/StockOrdersTable.test.tsx b/src/app/(app)/stock-orders/StockOrdersTable.test.tsx index 45081cb..970bc0c 100644 --- a/src/app/(app)/stock-orders/StockOrdersTable.test.tsx +++ b/src/app/(app)/stock-orders/StockOrdersTable.test.tsx @@ -156,20 +156,18 @@ describe("StockOrdersTable — download PDFs", () => { it("renders a 'Download Stocktake PDF' link to the Stocktake PDF endpoint", () => { render(); - const link = screen.getByTestId("download-stocktake-pdf"); - expect(link).toBeInTheDocument(); - expect(link.tagName).toBe("A"); + const link = screen.getByRole("link", { name: "Download Stocktake PDF" }); expect(link).toHaveAttribute("href", "/api/v1/stock-items/stocktake-pdf"); expect(link).toHaveAttribute("target", "_blank"); + expect(link).toHaveAttribute("rel", "noopener"); }); it("renders a 'Download Orders PDF' link to the Orders PDF endpoint", () => { render(); - const link = screen.getByTestId("download-orders-pdf"); - expect(link).toBeInTheDocument(); - expect(link.tagName).toBe("A"); + const link = screen.getByRole("link", { name: "Download Orders PDF" }); expect(link).toHaveAttribute("href", "/api/v1/stock-purchases/list-pdf"); expect(link).toHaveAttribute("target", "_blank"); + expect(link).toHaveAttribute("rel", "noopener"); }); }); diff --git a/src/app/(app)/stock-orders/StockOrdersTable.tsx b/src/app/(app)/stock-orders/StockOrdersTable.tsx index 78db6d6..717ac8a 100644 --- a/src/app/(app)/stock-orders/StockOrdersTable.tsx +++ b/src/app/(app)/stock-orders/StockOrdersTable.tsx @@ -159,7 +159,7 @@ export default function StockOrdersTable({ className={cn(buttonVariants({ variant: "outline" }), "gap-1.5")} data-testid="download-stocktake-pdf" > - +