diff --git a/src/components/modals/edit-node-modal.tsx b/src/components/modals/edit-node-modal.tsx index dd11186..140d8b5 100644 --- a/src/components/modals/edit-node-modal.tsx +++ b/src/components/modals/edit-node-modal.tsx @@ -18,6 +18,7 @@ import { useUserStore } from "@/stores/user-store" import { adminUpdateNode } from "@/lib/graph-api" import { isMocksEnabled } from "@/lib/mock-data" import { SYSTEM_ATTRIBUTES, fieldsForSchema } from "@/lib/node-schema-utils" +import { resolveNodeTitle } from "@/lib/node-display" import { computeMappings, type ExactMapping, @@ -377,13 +378,15 @@ export function EditNodeModal() { // ----- Render ----- if (!isOpen || !editingNode) return null + const displayTitle = resolveNodeTitle(editingNode, schemas) + return ( !open && close()}> Edit Node - Update properties for {editingNode.ref_id} + Update properties for {displayTitle} diff --git a/src/lib/__tests__/edit-node-modal.test.tsx b/src/lib/__tests__/edit-node-modal.test.tsx index b33de0c..48104dd 100644 --- a/src/lib/__tests__/edit-node-modal.test.tsx +++ b/src/lib/__tests__/edit-node-modal.test.tsx @@ -7,6 +7,14 @@ import React from "react" // Hoisted mocks // --------------------------------------------------------------------------- +// node-display mock — controlled per test +let mockResolveNodeTitle = vi.fn((node: Record) => node.ref_id as string) + +vi.mock("@/lib/node-display", () => ({ + resolveNodeTitle: (...args: unknown[]) => mockResolveNodeTitle(args[0] as Record), +})) + + const { mockAdminUpdateNode } = vi.hoisted(() => ({ mockAdminUpdateNode: vi.fn().mockResolvedValue({}), })) @@ -130,6 +138,7 @@ describe("EditNodeModal", () => { beforeEach(() => { vi.clearAllMocks() mockAdminUpdateNode.mockResolvedValue({}) + mockResolveNodeTitle = vi.fn((node: Record) => node.ref_id as string) closeModal() }) @@ -367,6 +376,33 @@ describe("EditNodeModal", () => { expect(mockClose).toHaveBeenCalledOnce() }) }) + + // ------------------------------------------------------------------------- + // DialogDescription — resolved title display + // ------------------------------------------------------------------------- + describe("DialogDescription title resolution", () => { + it("shows resolved title (from title_key) in the description", () => { + mockResolveNodeTitle = vi.fn(() => "Alice") + openModal() + render() + + expect(screen.getByText("Alice")).toBeDefined() + // Raw ref_id should NOT appear as the description span content + const description = screen.getByText(/Update properties for/) + expect(description.textContent).toContain("Alice") + expect(description.textContent).not.toContain("node-abc") + }) + + it("falls back to ref_id when no human-readable title exists", () => { + // Default mock already returns ref_id + mockResolveNodeTitle = vi.fn((node: Record) => node.ref_id as string) + openModal() + render() + + const description = screen.getByText(/Update properties for/) + expect(description.textContent).toContain("node-abc") + }) + }) })