diff --git a/packages/ra-ui-materialui/src/list/datatable/DataTable.spec.tsx b/packages/ra-ui-materialui/src/list/datatable/DataTable.spec.tsx
index 0277f304871..837c04a8f59 100644
--- a/packages/ra-ui-materialui/src/list/datatable/DataTable.spec.tsx
+++ b/packages/ra-ui-materialui/src/list/datatable/DataTable.spec.tsx
@@ -1,5 +1,11 @@
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
+import { QueryClient } from '@tanstack/react-query';
import * as React from 'react';
+import {
+ ResourceContextProvider,
+ TestMemoryRouter,
+ type AuthProvider,
+} from 'ra-core';
import {
Basic,
Columns,
@@ -12,6 +18,8 @@ import {
StandaloneDynamic,
StandaloneStatic,
} from './DataTable.stories';
+import { DataTable } from './DataTable';
+import { AdminContext } from '../../AdminContext';
describe('DataTable', () => {
it('should render one row per record in the list', async () => {
@@ -218,6 +226,71 @@ describe('DataTable', () => {
});
});
describe('bulkActionButtons', () => {
+ it('should not enable delete permission queries without an auth provider', async () => {
+ const queryClient = new QueryClient();
+
+ render(
+
+
+
+ >}
+ data={[{ id: 1 }]}
+ isPending={false}
+ onSelect={jest.fn()}
+ onToggleItem={jest.fn()}
+ selectedIds={[]}
+ total={1}
+ >
+
+
+
+
+
+ );
+
+ await waitFor(() => {
+ const [query] = queryClient.getQueryCache().findAll({
+ queryKey: ['auth', 'canAccess'],
+ });
+ expect(query.state.fetchStatus).toBe('idle');
+ expect(query.state.data).toBeUndefined();
+ });
+ });
+
+ it('should not check delete permissions when bulk actions are disabled', () => {
+ const authProvider: AuthProvider = {
+ canAccess: jest.fn().mockResolvedValue(true),
+ checkAuth: jest.fn().mockResolvedValue(undefined),
+ checkError: jest.fn().mockResolvedValue(undefined),
+ getPermissions: jest.fn().mockResolvedValue(undefined),
+ login: jest.fn().mockResolvedValue(undefined),
+ logout: jest.fn().mockResolvedValue(undefined),
+ };
+
+ render(
+
+
+
+
+
+
+
+
+
+ );
+
+ expect(authProvider.canAccess).not.toHaveBeenCalled();
+ });
+
it('should reveal bulk delete button by default on row selection', async () => {
render();
const checkboxes = await screen.findAllByRole('checkbox');
diff --git a/packages/ra-ui-materialui/src/list/datatable/DataTable.tsx b/packages/ra-ui-materialui/src/list/datatable/DataTable.tsx
index 8ccbfdf3927..35ce814a0f5 100644
--- a/packages/ra-ui-materialui/src/list/datatable/DataTable.tsx
+++ b/packages/ra-ui-materialui/src/list/datatable/DataTable.tsx
@@ -139,6 +139,7 @@ export const DataTable = React.forwardRef(function DataTable<
const { canAccess: canDelete } = useCanAccess({
resource: resourceFromContext,
action: 'delete',
+ ...(props.bulkActionButtons === false ? { enabled: false } : {}),
});
const {