From 8ee27789bca47ebafa4ab49692da1612f6c3fde2 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Thu, 23 Jul 2026 16:21:18 +0000 Subject: [PATCH] =?UTF-8?q?Report=20no=20install=20docs=20for=20coordinati?= =?UTF-8?q?on-=20and=20design-only=20properties=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../your-projects/live/docStatus.test.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts index df11c310..a3a8bf74 100644 --- a/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts +++ b/src/app/portfolio/[slug]/(portfolio)/your-projects/live/docStatus.test.ts @@ -197,6 +197,41 @@ describe("computeDocStatusMap", () => { expect(result["deal-1"].installStatus).toBe("none"); }); + it("counts only genuine install docs when coordination and design docs are also present", () => { + // Arrange + const deal = makeDeal({ dealId: "deal-1", proposedMeasures: cwi }); + const mixedDocs = [ + { fileType: "improvement_option_evaluation", measureName: null }, + { fileType: "retrofit_design_doc", measureName: null }, + ...cwiRequiredDocs.map((ft) => ({ fileType: ft, measureName: cwi })), + ]; + const docs = new Map([["deal-1", mixedDocs]]); + + // Act + const result = computeDocStatusMap([deal], docs, {}); + + // Assert + expect(result["deal-1"].measureProgress).toEqual([ + expect.objectContaining({ measureName: cwi, uploadedCount: cwiRequiredDocs.length }), + ]); + }); + + it("reports no install docs when only coordination and design docs are present", () => { + // Arrange + const deal = makeDeal({ dealId: "deal-1", proposedMeasures: null }); + const nonInstallDocs = [ + { fileType: "medium_term_improvement_plan", measureName: null }, + { fileType: "retrofit_design_doc", measureName: null }, + ]; + const docs = new Map([["deal-1", nonInstallDocs]]); + + // Act + const result = computeDocStatusMap([deal], docs, {}); + + // Assert + expect(result["deal-1"].hasInstallDocs).toBe(false); + }); + it('is "none" when measures are defined but no install docs have been uploaded', () => { const deal = makeDeal({ dealId: "deal-1", proposedMeasures: cwi }); // Only survey docs — no install docs