{"record":{"id":"cf0bea29c0bbba05","repo":"marmelab/react-admin","slug":"updatemany-not-implemented","errorCode":null,"errorMessage":"updateMany not implemented","messagePattern":"updateMany not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/dataProvider/testDataProvider.ts","lineNumber":38,"sourceCode":"        throw new Error('deleteMany is not implemented');\n    },\n    getList: async () => {\n        throw new Error('getList is not implemented');\n    },\n    getMany: async () => {\n        throw new Error('getMany is not implemented');\n    },\n    getManyReference: async () => {\n        throw new Error('getManyReference is not implemented');\n    },\n    getOne: async () => {\n        throw new Error('getOne is not implemented');\n    },\n    update: async () => {\n        throw new Error('update not implemented');\n    },\n    updateMany: async () => {\n        throw new Error('updateMany not implemented');\n    },\n};\nexport const testDataProvider = (\n    overrides?: Partial<DataProvider>\n): DataProvider => ({\n    ...defaultTestDataProvider,\n    ...overrides,\n});\n","sourceCodeStart":20,"sourceCodeEnd":47,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/dataProvider/testDataProvider.ts#L20-L47","documentation":"The default testDataProvider's updateMany method throws deliberately. Bulk updates are not implemented in the default provider, so tests must override it.","triggerScenarios":"Calling dataProvider.updateMany (or useUpdateMany / bulk selection actions in a List) with the default testDataProvider and no updateMany override.","commonSituations":"Testing bulk-select delete/update actions in a ListView; the Datagrid bulk action buttons call updateMany against the unmocked default.","solutions":["Override it: testDataProvider({ updateMany: async () => ({ data: [1, 2] }) })","Provide a jest/vi spy for updateMany to assert calls","Disable bulk actions in the test (Datagrid bulkActionButtons={false})"],"exampleFix":"// before\nconst dataProvider = testDataProvider();\n// after\nconst dataProvider = testDataProvider({\n  updateMany: async () => ({ data: [] }),\n});","handlingStrategy":"validation","validationCode":"if (dataProvider.updateMany === defaultTestDataProvider.updateMany) {\n  throw new Error('updateMany must be overridden when testing bulk actions');\n}","typeGuard":"const canUpdateMany = (dp: DataProvider): boolean => typeof dp.updateMany === 'function' && dp.updateMany !== defaultTestDataProvider.updateMany;","tryCatchPattern":"try {\n  await dataProvider.updateMany('posts', { ids: [1, 2], data: { published: true } });\n} catch (e) {\n  if (/updateMany not implemented/.test(e.message)) {\n    console.warn('Override updateMany in testDataProvider');\n  }\n  throw e;\n}","preventionTips":["Disable bulkActionButtons in tests that don't cover bulk operations","Pre-mock updateMany returning { data: ids } in shared test setup","Assert mock call args to catch accidental bulk updates"],"tags":["testing","data-provider","mock","react-admin"],"backgroundTag":"unimplemented-mock-method","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}