Project: doctolib-doctolib · Branch: .invalid · Mode: · Model: claude-sonnet-4-6 Stats: 1 user messages, 15 tool calls, tools used: Read, Glob, Grep, Bash. Conversation Turn 1 — User You are doing a focused bug scan for PR #238556 in doctolib/doctolib. Full diff: diff --git a/package-lock.json b/package-lock.json @@ -66104,6 +66104,7 @@ "version": "1.0.0", "license": "Doctolib", "dependencies": { + "@doctolib/design-system-icons": "^2.22.0", "@doctolib/dmp": "^1.0.0", "@doctolib/tpf-national-health-records": "^4.1.1", "@doctolib/tpf-national-health-records-ui": "^10.0.0", diff --git a/packages/@doctolib/national-health-records/package.json b/packages/@doctolib/national-health-records/package.json @@ -39,6 +39,7 @@ "dependencies": { + "@doctolib/design-system-icons": "^2.22.0", "@doctolib/dmp": "^1.0.0", ... diff --git a/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts NEW FILE (61 lines): +import { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' +import { createNhrDocumentCategoryColumn } from '@doctolib/tpf-national-health-records-ui' +import { columnsFactory } from './columnsFactory' + +jest.mock('@doctolib/dmp', () => ({ + DOCUMENT_STATUS: { + validated: 'validated', + obsolete: 'obsolete', + archived: 'archived', + }, +})) + +jest.mock('../mappers/dmpDocumentHelpers', () => ({ + getTypeCode: jest.fn(), + getProcedureDate: jest.fn(), + getShareDate: jest.fn(), + getAuthorName: jest.fn(), + isPatientAuthored: jest.fn(), + getVisibility: jest.fn(), +})) + +jest.mock('@doctolib/tpf-national-health-records-ui', () => ({ + createNhrDocumentCategoryColumn: jest.fn(() => ({ + key: 'documentCategory', + header: '', + sortable: false, + render: jest.fn(), + })), + createNhrDocumentNameColumn: jest.fn(...), + createNhrProcedureDateColumn: jest.fn(...), + createNhrShareDateColumn: jest.fn(...), + createNhrSharedByColumn: jest.fn(...), + createNhrStatusColumn: jest.fn(...), + createNhrVisibilityColumn: jest.fn(...), +})) + +describe('columnsFactory', () => { + beforeEach(() => { + jest.clearAllMocks() + }) + + it('category column passes an iconMap to createNhrDocumentCategoryColumn', () => { + columnsFactory() + expect(createNhrDocumentCategoryColumn).toHaveBeenCalledWith( + expect.objectContaining({ iconMap: expect.any(Object) }) + ) + }) + + it("iconMap includes a '' catch-all key with a valid icon component", () => { + columnsFactory() + const callArgs = (createNhrDocumentCategoryColumn as jest.Mock).mock.calls[0][0] + expect(callArgs.iconMap).toHaveProperty('') + expect(callArgs.iconMap['']).toBe(FileRegularIcon) + }) +}) diff --git a/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts @@ -9,6 +9,7 @@ +import { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' export function columnsFactory(): ColumnConfig[] { return [ createNhrDocumentCategoryColumn({ header: 'Document type', getTypeCode, + iconMap: { '': FileRegularIcon }, }), Also read these files directly in the worktree: - /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts - /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts - /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/package.json Focus ONLY on large, impactful bugs. Ignore: - Nitpicks - Style issues - Things a linter/typechecker would catch - False positives Return a list of real bugs with explanations. If none, say so. Turn 1 — Assistant I'll read the actual files in the worktree to do a proper bug scan. Tools used: - Read: /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts Tool results: → result (ok): 1 import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui' 2 import { 3 createNhrDocumentCategoryColumn, 4 createNhrDocumentNameColumn, 5 createNhrProcedureDateColumn, 6 createNhrShareDateColumn, 7 createNhrSharedByColumn, 8 createNhrStatusColumn, 9 createNhrVisibilityColumn, 10 } from '@doctolib/tpf-national-health-records-ui' 11 import { DOCUMENT_STATUS } from '@doctolib/dmp' 12 import { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' 13 …(truncated, 1421 more chars) Tools used: - Read: /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts Tool results: → result (ok): 1 import { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' 2 3 import { createNhrDocumentCategoryColumn } from '@doctolib/tpf-national-health-records-ui' 4 import { columnsFactory } from './columnsFactory' 5 6 jest.mock('@doctolib/dmp', () => ({ 7 DOCUMENT_STATUS: { 8 validated: 'validated', 9 obsolete: 'obsolete', 10 archived: 'archived', 11 }, 12 })) 13 14 jest.mock('../mappers/dmpDocumentHelpers', () => ({ 15 getTypeCode: jest.fn(), 16 getProcedur …(truncated, 1842 more chars) Tools used: - Read: /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/package.json Tool results: → result (ok): 1 { 2 "name": "@doctolib/national-health-records", 3 "version": "1.0.0", 4 "publishConfig": { 5 "registry": "https://doctolib-580698825394.d.codeartifact.eu-west-1.amazonaws.com/npm/npm-internal/" 6 }, 7 "repository": { 8 "type": "git", 9 "url": "git+https://github.com/doctolib/doctolib.git" 10 }, 11 "keywords": [ 12 "upfront", 13 "modular frontend", 14 "in-monolith-package" 15 ], 16 "engines": { 17 "node": ">= 24.8.0", 18 "npm": ">= 11.6.0" 19 …(truncated, 980 more chars) Now let me look at what createNhrDocumentCategoryColumn expects for iconMap, and check the FileRegularIcon export to verify the import path is correct. Tools used: - Glob: /design-system-icons//.ts in /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib Tools used: - Grep: createNhrDocumentCategoryColumn in /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169 Tool results: → result (ok): No files found Tool results: → result (ok): Found 2 files /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts /Users/USER/workspace/doctolib/worktrees/doctolib/fhir-2169/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.test.ts Tools used: - Grep: createNhrDocumentCategoryColumn in /Users/USER/workspace/doctolib/doctolib/packages Tools used: - Glob: /design-system-icons/FileRegularIcon in /Users/USER/workspace/doctolib/doctolib Tool results: → result (ok): Found 1 file packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts Tool results: → result (ok): No files found Tools used: - Glob: /tpf-national-health-records-ui//.ts in /Users/USER/workspace/doctolib/doctolib/packages Tools used: - Bash: find /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui -name ".d.ts" 2>/dev/null | head -20 Tool results: → result (ok): /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/entry.d.ts /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/locales/loadNamespace.d.ts /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/types.d.ts /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/i18n.d.ts /Users/USER/workspace/doctolib/doctolib/node_ …(truncated, 2468 more chars) Tool results: → result (ok): No files found Tools used: - Read: /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/business/factories/columns/createNhrDocumentCategoryColumn.d.ts Tool results: → result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records'; 2 import type { IconMap } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell.js'; 3 import type { ColumnConfig } from '../../../types.js'; 4 export type NhrDocumentCategoryColumnOptions = { 5 / Translated column header / 6 header: string; 7 / Extracts the human-readable document category label from a document / 8 getTypeCode: (doc: NhrDocument) => string | unde …(truncated, 528 more chars) Tools used: - Bash: find /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons -name "FileRegularIcon" 2>/dev/null | head -10 Tool results: → result (ok): /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/generated-components/FileRegularIcon.d.ts.map /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/generated-components/FileRegularIcon.d.ts /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/generated-components/FileRegularIcon.js /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/generated-components …(truncated, 151 more chars) Tools used: - Bash: cat /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/package.json | python3 -c "import sys, json; d = json.load(sys.stdin); print(json.dumps(d.get('exports', {}) …(truncated, 36 more chars) Tool results: → result (ok): { ".": { "import": "./dist/bundled-index.js", "types": "./dist/bundled-index.d.ts", "default": "./dist/bundled-index.js" }, "./svg/": "./dist/", "./Icon.scss": "./dist/components/private/_Icon.scss", "./Icon": { "import": "./dist/components/Icon.js", "types": "./dist/components/Icon.d.ts", "default": "./dist/components/Icon.js" }, "./helpers": { "import": "./dist/helpers.js", "types": "./dist/helpers.d.ts", "default": "./dist/helpers.js" }, …(truncated, 314 more chars) Tools used: - Read: /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/business/factories/columns/createNhrDocumentCategoryColumn.d.ts Tool results: → result (ERROR): File does not exist. Note: your current working directory is /Users/USER/workspace/doctolib/doctolib. Tools used: - Read: /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/design-system-icons/dist/generated-components/FileRegularIcon.d.ts Tool results: → result (ok): 1 import type { DesignSystemIconComponent } from '../components/private/_Icon.js'; 2 export declare const FileRegularIcon: DesignSystemIconComponent; 3 //# sourceMappingURL=FileRegularIcon.d.ts.map Tools used: - Bash: cat /Users/USER/workspace/doctolib/doctolib/node_modules/@doctolib/tpf-national-health-records-ui/dist/components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell.d.ts 2>/dev/null Tool results: → result (ok): import type { DesignSystemIconComponent } from '@doctolib/design-system-icons'; export type IconMap = Record; type NhrDocumentCategoryCellProps = { label: string | undefined; iconMap?: IconMap; }; export declare const NhrDocumentCategoryCell: ({ label, iconMap }: NhrDocumentCategoryCellProps) => import("react/jsx-runtime").JSX.Element | null; export {}; //# sourceMappingURL=NhrDocumentCategoryCell.d.ts.map I now have all the information needed. The import path @doctolib/design-system-icons/FileRegularIcon resolves correctly via the "./" export wildcard in the package's exports map, and the IconMap type (Record) is fully compatible with { '': FileRegularIcon }. The test correctly imports and asserts against the same FileRegularIcon reference. No large, impactful bugs found in this PR. The changes are straightforward and correct: - The deep-import path @doctolib/design-system-icons/FileRegularIcon is valid — the package's exports map has a "./" wildcard that resolves it to ./dist/generated-components/FileRegularIcon.js. - FileRegularIcon is typed as DesignSystemIconComponent, which matches IconMap = Record — so passing { '*': FileRegularIcon } is type-safe. - The iconMap field on NhrDocumentCategoryColumnOptions is declared optional, so this is a non-breaking additive change. - The test imports FileRegularIcon directly and uses toBe() to assert reference equality against the same module — this will work correctly since Jest module registry keeps a single instance per mock boundary (the module itself is not mocked, only tpf-national-health-records-ui). - The dependency was correctly added to both package.json and package-lock.json as a runtime dependency (not dev-only), which is appropriate since columnsFactory.ts uses it at runtime.