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 }) => (