Skip to content

Commit ea4b699

Browse files
authored
Merge pull request #5373 from marmelab/fix-data-provider-response-shape-detection
Fix dataProvider fails silently when response has wrong type
2 parents 6aaba4f + cd2f610 commit ea4b699

File tree

4 files changed

+37
-22
lines changed

4 files changed

+37
-22
lines changed

packages/ra-core/src/controller/useCreateController.spec.tsx

+15-6
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ describe('useCreateController', () => {
7474
it('should call the dataProvider.create() function on save', async () => {
7575
const create = jest
7676
.fn()
77-
.mockImplementationOnce((_, { data }) => Promise.resolve({ data }));
77+
.mockImplementationOnce((_, { data }) =>
78+
Promise.resolve({ data: { id: 123, ...data } })
79+
);
7880
const dataProvider = ({
7981
getOne: () => Promise.resolve({ data: { id: 12 } }),
8082
create,
@@ -101,7 +103,8 @@ describe('useCreateController', () => {
101103
let saveCallback;
102104
const dataProvider = ({
103105
getOne: () => Promise.resolve({ data: { id: 12 } }),
104-
create: (_, { data }) => Promise.resolve({ data }),
106+
create: (_, { data }) =>
107+
Promise.resolve({ data: { id: 123, ...data } }),
105108
} as unknown) as DataProvider;
106109
const { dispatch } = renderWithRedux(
107110
<DataProviderContext.Provider value={dataProvider}>
@@ -168,7 +171,8 @@ describe('useCreateController', () => {
168171
let saveCallback;
169172
const dataProvider = ({
170173
getOne: () => Promise.resolve({ data: { id: 12 } }),
171-
create: (_, { data }) => Promise.resolve({ data }),
174+
create: (_, { data }) =>
175+
Promise.resolve({ data: { id: 123, ...data } }),
172176
} as unknown) as DataProvider;
173177
const onSuccess = jest.fn();
174178
const { dispatch } = renderWithRedux(
@@ -194,7 +198,8 @@ describe('useCreateController', () => {
194198
let saveCallback;
195199
const dataProvider = ({
196200
getOne: () => Promise.resolve({ data: { id: 12 } }),
197-
create: (_, { data }) => Promise.resolve({ data }),
201+
create: (_, { data }) =>
202+
Promise.resolve({ data: { id: 123, ...data } }),
198203
} as unknown) as DataProvider;
199204
const onSuccess = jest.fn();
200205
const onSuccessSave = jest.fn();
@@ -286,7 +291,9 @@ describe('useCreateController', () => {
286291
let saveCallback;
287292
const create = jest
288293
.fn()
289-
.mockImplementationOnce((_, { data }) => Promise.resolve({ data }));
294+
.mockImplementationOnce((_, { data }) =>
295+
Promise.resolve({ data: { id: 123, ...data } })
296+
);
290297
const dataProvider = ({
291298
getOne: () => Promise.resolve({ data: { id: 12 } }),
292299
create,
@@ -317,7 +324,9 @@ describe('useCreateController', () => {
317324
let saveCallback;
318325
const create = jest
319326
.fn()
320-
.mockImplementationOnce((_, { data }) => Promise.resolve({ data }));
327+
.mockImplementationOnce((_, { data }) =>
328+
Promise.resolve({ data: { id: 123, ...data } })
329+
);
321330
const dataProvider = ({
322331
getOne: () => Promise.resolve({ data: { id: 12 } }),
323332
create,

packages/ra-core/src/controller/useEditController.spec.tsx

+11-7
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ describe('useEditController', () => {
8585
const update = jest
8686
.fn()
8787
.mockImplementationOnce((_, { id, data, previousData }) =>
88-
Promise.resolve({ data: { ...previousData, ...data } })
88+
Promise.resolve({ data: { id, ...previousData, ...data } })
8989
);
9090
const dataProvider = ({
9191
getOne: () => Promise.resolve({ data: { id: 12 } }),
@@ -115,7 +115,7 @@ describe('useEditController', () => {
115115
const dataProvider = ({
116116
getOne: () => Promise.resolve({ data: { id: 12 } }),
117117
update: (_, { id, data, previousData }) =>
118-
Promise.resolve({ data: { ...previousData, ...data } }),
118+
Promise.resolve({ data: { id, ...previousData, ...data } }),
119119
} as unknown) as DataProvider;
120120
let saveCallback;
121121
const { dispatch } = renderWithRedux(
@@ -148,7 +148,7 @@ describe('useEditController', () => {
148148
const dataProvider = ({
149149
getOne: () => Promise.resolve({ data: { id: 12 } }),
150150
update: (_, { id, data, previousData }) =>
151-
Promise.resolve({ data: { ...previousData, ...data } }),
151+
Promise.resolve({ data: { id, ...previousData, ...data } }),
152152
} as unknown) as DataProvider;
153153
const { dispatch } = renderWithRedux(
154154
<DataProviderContext.Provider value={dataProvider}>
@@ -188,7 +188,7 @@ describe('useEditController', () => {
188188
const dataProvider = ({
189189
getOne: () => Promise.resolve({ data: { id: 12 } }),
190190
update: (_, { id, data, previousData }) =>
191-
Promise.resolve({ data: { ...previousData, ...data } }),
191+
Promise.resolve({ data: { id, ...previousData, ...data } }),
192192
} as unknown) as DataProvider;
193193
const onSuccess = jest.fn();
194194
const { dispatch } = renderWithRedux(
@@ -219,7 +219,7 @@ describe('useEditController', () => {
219219
const dataProvider = ({
220220
getOne: () => Promise.resolve({ data: { id: 12 } }),
221221
update: (_, { id, data, previousData }) =>
222-
Promise.resolve({ data: { ...previousData, ...data } }),
222+
Promise.resolve({ data: { id, ...previousData, ...data } }),
223223
} as unknown) as DataProvider;
224224
const onSuccess = jest.fn();
225225
const onSuccessSave = jest.fn();
@@ -323,7 +323,9 @@ describe('useEditController', () => {
323323
let saveCallback;
324324
const update = jest
325325
.fn()
326-
.mockImplementationOnce((_, { data }) => Promise.resolve({ data }));
326+
.mockImplementationOnce((_, { id, data }) =>
327+
Promise.resolve({ data: { id, ...data } })
328+
);
327329
const dataProvider = ({
328330
getOne: () => Promise.resolve({ data: { id: 12 } }),
329331
update,
@@ -362,7 +364,9 @@ describe('useEditController', () => {
362364
let saveCallback;
363365
const update = jest
364366
.fn()
365-
.mockImplementationOnce((_, { data }) => Promise.resolve({ data }));
367+
.mockImplementationOnce((_, { id, data }) =>
368+
Promise.resolve({ data: { id, ...data } })
369+
);
366370
const dataProvider = ({
367371
getOne: () => Promise.resolve({ data: { id: 12 } }),
368372
update,

packages/ra-core/src/core/dataFetchActions.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@ export const UPDATE_MANY = 'UPDATE_MANY';
88
export const DELETE = 'DELETE';
99
export const DELETE_MANY = 'DELETE_MANY';
1010

11-
export const fetchActionsWithRecordResponse = [GET_ONE, CREATE, UPDATE];
11+
export const fetchActionsWithRecordResponse = ['getOne', 'create', 'update'];
1212
export const fetchActionsWithArrayOfIdentifiedRecordsResponse = [
13-
GET_LIST,
14-
GET_MANY,
15-
GET_MANY_REFERENCE,
13+
'getList',
14+
'getMany',
15+
'getManyReference',
1616
];
1717
export const fetchActionsWithArrayOfRecordsResponse = [
1818
...fetchActionsWithArrayOfIdentifiedRecordsResponse,
19-
UPDATE_MANY,
20-
DELETE_MANY,
19+
'updateMany',
20+
'deleteMany',
2121
];
22-
export const fetchActionsWithTotalResponse = [GET_LIST, GET_MANY_REFERENCE];
22+
export const fetchActionsWithTotalResponse = ['getList', 'getManyReference'];
2323

2424
export const sanitizeFetchType = (fetchType: string) => {
2525
switch (fetchType) {

packages/ra-core/src/dataProvider/useDataProvider.spec.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ describe('useDataProvider', () => {
8787
});
8888

8989
it('should dispatch CUSTOM_FETCH actions by default', async () => {
90-
const getOne = jest.fn(() => Promise.resolve({ data: null }));
90+
const getOne = jest.fn(() => Promise.resolve({ data: { id: 123 } }));
9191
const dataProvider = { getOne };
9292
const { dispatch } = renderWithRedux(
9393
<DataProviderContext.Provider value={dataProvider}>
@@ -121,7 +121,9 @@ describe('useDataProvider', () => {
121121
return <div data-testid="data">{JSON.stringify(data)}</div>;
122122
return <div data-testid="loading">loading</div>;
123123
};
124-
const getOne = jest.fn(() => Promise.resolve({ data: null }));
124+
const getOne = jest.fn(() =>
125+
Promise.resolve({ data: { id: 123 } })
126+
);
125127
const dataProvider = { getOne };
126128
const { dispatch } = renderWithRedux(
127129
<DataProviderContext.Provider value={dataProvider}>

0 commit comments

Comments
 (0)