From 9ddab598a7d73d5821d1cad70cf5f87f1a7e9de1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 23:47:56 +0000 Subject: [PATCH] test: inherit the real @object-ui/react surface in 25 hand-listed mocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each of these files mocked `@object-ui/react` with a factory that hand-lists the exports it returns, so the mock's export surface is frozen at whatever the author typed that day. That makes every one of them a latent COLLECTION failure for the next export any widely-imported module reads at module scope: the file dies before a single test runs, so the suite goes red with zero failed assertions and reads like flake or infrastructure. Converted to the `importOriginal` form already used by the other 81 sites, so the mock is a superset of the real module and only the overrides each test means to control are replaced. The spread is inserted FIRST, so every existing override still wins. No assertion was edited or deleted — every removed line in this diff is a `vi.mock('@object-ui/react', ...)` header line. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01CRJge11jso9TpXRWFt1Z49 --- .changeset/6768-mock-import-original.md | 12 ++++++++++++ .../hooks/__tests__/useNavActionDispatch.test.tsx | 5 ++++- .../views/metadata-admin/AccessExplainPanel.test.tsx | 3 ++- .../metadata-admin/AssignedUsersSection.test.tsx | 3 ++- .../inspectors/FlowReferenceField.lookup.test.tsx | 3 ++- .../FlowReferenceField.membershipTier.test.tsx | 3 ++- .../metadata-admin/previews/PagePreview.test.tsx | 3 ++- .../__tests__/DashboardRenderer.designMode.test.tsx | 3 ++- .../__tests__/record-details.effectiveOps.test.tsx | 3 ++- .../src/renderers/__tests__/record-details.test.tsx | 3 ++- .../plugin-gantt/src/useGanttTranslation.test.tsx | 3 ++- packages/plugin-timeline/src/ObjectTimeline.test.tsx | 3 ++- .../__tests__/ObjectView.canonicalTableKeys.test.tsx | 3 ++- .../src/__tests__/ObjectView.expandGate.test.tsx | 3 ++- .../src/__tests__/ObjectView.filterSources.test.tsx | 3 ++- .../src/__tests__/ObjectView.formTitleI18n.test.tsx | 3 ++- .../ObjectView.formTitleNoProviderFallback.test.tsx | 3 ++- .../__tests__/ObjectView.hostOnlyViewTypes.test.tsx | 3 ++- .../ObjectView.kanbanConditionalFormatting.test.tsx | 3 ++- .../src/__tests__/ObjectView.mapFlatten.test.tsx | 3 ++- .../src/__tests__/ObjectView.refreshSignal.test.tsx | 3 ++- .../src/__tests__/ObjectView.sortSink.test.tsx | 3 ++- .../ObjectView.tableColumnsForwarding.test.tsx | 3 ++- .../plugin-view/src/__tests__/ObjectView.test.tsx | 3 ++- .../__tests__/ObjectView.viewIdentityDeps.test.tsx | 3 ++- .../plugin-view/src/__tests__/ViewSwitcher.test.tsx | 3 ++- 26 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 .changeset/6768-mock-import-original.md diff --git a/.changeset/6768-mock-import-original.md b/.changeset/6768-mock-import-original.md new file mode 100644 index 000000000..3369e4f48 --- /dev/null +++ b/.changeset/6768-mock-import-original.md @@ -0,0 +1,12 @@ +--- +--- + +Test-only change: 25 test files that partially mock `@object-ui/react` now inherit the +real export surface via `importOriginal` instead of hand-listing exports. No published +behaviour changes — no source file is touched, and no assertion was edited or deleted. + +A hand-listed mock freezes its export surface at whatever the author typed that day, so +the next export any widely-imported module reads at module scope kills those files at +COLLECTION — zero failed assertions, the file's tests never run, and the red suite reads +like flake. Spreading the real module makes the mock a superset, so a transitive consumer +can never trip over an export the test never meant to replace. diff --git a/packages/app-shell/src/hooks/__tests__/useNavActionDispatch.test.tsx b/packages/app-shell/src/hooks/__tests__/useNavActionDispatch.test.tsx index 6d2adb530..18a57c2a0 100644 --- a/packages/app-shell/src/hooks/__tests__/useNavActionDispatch.test.tsx +++ b/packages/app-shell/src/hooks/__tests__/useNavActionDispatch.test.tsx @@ -24,7 +24,10 @@ const getItem = vi.fn(); const toastError = vi.fn(); vi.mock('sonner', () => ({ toast: { error: (...a: unknown[]) => toastError(...a) } })); -vi.mock('@object-ui/react', () => ({ useAction: () => ({ execute }) })); +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), + useAction: () => ({ execute }), +})); vi.mock('../../providers/MetadataProvider', () => ({ useMetadata: () => ({ getItem }) })); import { useNavActionDispatch } from '../useNavActionDispatch'; diff --git a/packages/app-shell/src/views/metadata-admin/AccessExplainPanel.test.tsx b/packages/app-shell/src/views/metadata-admin/AccessExplainPanel.test.tsx index 54f4da197..5d0324c20 100644 --- a/packages/app-shell/src/views/metadata-admin/AccessExplainPanel.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/AccessExplainPanel.test.tsx @@ -22,7 +22,8 @@ let mockObjectList: Array> = []; vi.mock('@object-ui/auth', () => ({ createAuthenticatedFetch: () => fetchSpy, })); -vi.mock('@object-ui/react', () => ({ +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), useAdapter: () => ({ find: vi.fn(async () => []) }), })); vi.mock('./useMetadata', () => ({ diff --git a/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx b/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx index 8579b72dc..21f6f86bb 100644 --- a/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.test.tsx @@ -11,7 +11,8 @@ import { describe, expect, it, vi } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; import { AssignedUsersSection } from './AssignedUsersSection'; -vi.mock('@object-ui/react', () => ({ +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), useAdapter: () => mockAdapter, })); vi.mock('@object-ui/fields', () => ({ diff --git a/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.lookup.test.tsx b/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.lookup.test.tsx index b7bfcb659..fcbed3dfc 100644 --- a/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.lookup.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.lookup.test.tsx @@ -44,7 +44,8 @@ const state = vi.hoisted(() => { // graphs. LookupField's own behaviour (search, hydration through `id_field`, // commit-on-select) is covered in the fields package — this suite verifies // the WIRING: which cell renders per kind, and what binding it receives. -vi.mock('@object-ui/react', () => ({ +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), useAdapter: () => state.adapter, // @object-ui/components wires this at module scope (related-count-store). subscribeDataChanges: () => () => {}, diff --git a/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.membershipTier.test.tsx b/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.membershipTier.test.tsx index abecbac38..1780794ad 100644 --- a/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.membershipTier.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/inspectors/FlowReferenceField.membershipTier.test.tsx @@ -64,7 +64,8 @@ const state = vi.hoisted(() => { }; }); -vi.mock('@object-ui/react', () => ({ +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), useAdapter: () => null, // @object-ui/components wires this at module scope (related-count-store). subscribeDataChanges: () => () => {}, diff --git a/packages/app-shell/src/views/metadata-admin/previews/PagePreview.test.tsx b/packages/app-shell/src/views/metadata-admin/previews/PagePreview.test.tsx index 4e1e0cc4d..d82566795 100644 --- a/packages/app-shell/src/views/metadata-admin/previews/PagePreview.test.tsx +++ b/packages/app-shell/src/views/metadata-admin/previews/PagePreview.test.tsx @@ -13,7 +13,8 @@ const { schemaSpy } = vi.hoisted(() => ({ schemaSpy: vi.fn() })); vi.mock('../../InterfaceListPage', () => ({ InterfaceListPage: () =>
, })); -vi.mock('@object-ui/react', () => ({ +vi.mock('@object-ui/react', async (importOriginal) => ({ + ...(await importOriginal>()), SchemaRenderer: ({ schema }: { schema: any }) => { schemaSpy(schema); return
; diff --git a/packages/plugin-dashboard/src/__tests__/DashboardRenderer.designMode.test.tsx b/packages/plugin-dashboard/src/__tests__/DashboardRenderer.designMode.test.tsx index 9b7ba6c38..f4469e6be 100644 --- a/packages/plugin-dashboard/src/__tests__/DashboardRenderer.designMode.test.tsx +++ b/packages/plugin-dashboard/src/__tests__/DashboardRenderer.designMode.test.tsx @@ -5,9 +5,10 @@ import type { DashboardComponentSchema } from '@object-ui/types'; // Mock SchemaRenderer to avoid pulling in the full renderer tree. // Forwards className and includes an interactive child to simulate real chart content. -vi.mock('@object-ui/react', async () => { +vi.mock('@object-ui/react', async (importOriginal) => { const React = await import('react'); return { + ...(await importOriginal>()), SchemaRenderer: ({ schema, className }: { schema: any; className?: string }) => (