From f8784e3ba9833d54ba5a97213ee59f83c06d1324 Mon Sep 17 00:00:00 2001 From: SJCoetz Date: Wed, 29 Jul 2026 16:00:16 +0200 Subject: [PATCH] fix(orders): review modal preview review fixes (mixed tests, decorative chip comment) Co-Authored-By: Claude Opus 4.8 Co-authored-by: Orca --- src/components/orders-review-modal.test.tsx | 93 +++++++++++++++++++++ src/components/orders-review-modal.tsx | 5 +- 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/src/components/orders-review-modal.test.tsx b/src/components/orders-review-modal.test.tsx index f265bbe..72ac6de 100644 --- a/src/components/orders-review-modal.test.tsx +++ b/src/components/orders-review-modal.test.tsx @@ -333,4 +333,97 @@ describe("OrdersReviewModal", () => { expect(screen.getByText(/no preview/i)).toBeInTheDocument(); expect(screen.getByText("doc.docx")).toBeInTheDocument(); }); + + it("PDF wins over image when attachments are mixed [pdf, image]", () => { + render( + , + ); + const iframe = document.querySelector( + '[data-testid="review-attachment-iframe"]', + ); + expect(iframe).toBeInTheDocument(); + expect(iframe?.getAttribute("src")).toBe( + "/api/v1/files/coll-1/att-pdf/pdf-token", + ); + expect(document.querySelector('[data-testid="review-attachment-img"]')).toBeNull(); + }); + + it("image renders with a '+N unpreviewable' hint when mixed [image, doc]", () => { + render( + , + ); + const img = document.querySelector( + '[data-testid="review-attachment-img"]', + ); + expect(img).toBeInTheDocument(); + expect(img?.getAttribute("src")).toBe( + "/api/v1/files/coll-1/att-img/photo-token", + ); + expect(screen.getByText(/unpreviewable attachment/i)).toBeInTheDocument(); + }); }); diff --git a/src/components/orders-review-modal.tsx b/src/components/orders-review-modal.tsx index cbcb44c..51f5bee 100644 --- a/src/components/orders-review-modal.tsx +++ b/src/components/orders-review-modal.tsx @@ -549,7 +549,10 @@ function SourceOfTruth({ Attachments ({attachments.length}) - {/* Tab strip — one chip per attachment, primary chip = previewTarget */} + {/* Tab strip — DECORATIVE in v1 (no click handler, no activeId state). + Only the first previewable attachment (PDF > image) is rendered below; + the chips are visual context. Future v2 could wire them with + `useState` inside `SourceOfTruth` to swap the preview. */} {attachments.length > 1 && (
{attachments.map((a) => {