Skip to content

Commit f2db766

Browse files
committed
applied review
1 parent 1caa52d commit f2db766

3 files changed

Lines changed: 66 additions & 33 deletions

File tree

packages/ra-core/src/dataProvider/useDelete.spec.tsx

Lines changed: 52 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,33 @@ describe('useDelete', () => {
7777
});
7878

7979
it('uses the latest declaration time mutationMode', async () => {
80+
const posts = [
81+
{ id: 1, title: 'Hello' },
82+
{ id: 2, title: 'World' },
83+
];
84+
let resolveDelete: (() => void) | undefined;
85+
const dataProvider = {
86+
getList: () =>
87+
Promise.resolve({
88+
data: posts,
89+
total: posts.length,
90+
}),
91+
delete: jest.fn((_, params) => {
92+
return new Promise(resolve => {
93+
resolveDelete = () => {
94+
const index = posts.findIndex(
95+
post => post.id === params.id
96+
);
97+
if (index !== -1) {
98+
posts.splice(index, 1);
99+
}
100+
resolve({ data: params.previousData });
101+
};
102+
});
103+
}),
104+
} as any;
80105
// This story uses the pessimistic mode by default
81-
render(<MutationMode />);
106+
render(<MutationMode dataProvider={dataProvider} />);
82107
await waitFor(() => new Promise(resolve => setTimeout(resolve, 0)));
83108
fireEvent.click(screen.getByText('Change mutation mode to optimistic'));
84109
fireEvent.click(screen.getByText('Delete first post'));
@@ -89,36 +114,38 @@ describe('useDelete', () => {
89114
expect(screen.queryByText('World')).not.toBeNull();
90115
expect(screen.queryByText('mutating')).not.toBeNull();
91116
});
92-
await waitFor(
93-
() => {
94-
expect(screen.queryByText('success')).not.toBeNull();
95-
expect(screen.queryByText('Hello')).toBeNull();
96-
expect(screen.queryByText('World')).not.toBeNull();
97-
expect(screen.queryByText('mutating')).toBeNull();
98-
},
99-
{ timeout: 3000 }
100-
);
117+
resolveDelete?.();
118+
await waitFor(() => {
119+
expect(screen.queryByText('success')).not.toBeNull();
120+
expect(screen.queryByText('Hello')).toBeNull();
121+
expect(screen.queryByText('World')).not.toBeNull();
122+
expect(screen.queryByText('mutating')).toBeNull();
123+
});
101124
});
102125

103126
it('uses the latest declaration time params', async () => {
104127
const posts = [
105128
{ id: 1, title: 'Hello' },
106129
{ id: 2, title: 'World' },
107130
];
131+
let resolveDelete: (() => void) | undefined;
108132
const dataProvider = {
109-
getList: () => {
110-
return Promise.resolve({
133+
getList: () =>
134+
Promise.resolve({
111135
data: posts,
112136
total: posts.length,
113-
});
114-
},
137+
}),
115138
delete: jest.fn((_, params) => {
116139
return new Promise(resolve => {
117-
setTimeout(() => {
118-
const index = posts.findIndex(p => p.id === params.id);
119-
posts.splice(index, 1);
140+
resolveDelete = () => {
141+
const index = posts.findIndex(
142+
post => post.id === params.id
143+
);
144+
if (index !== -1) {
145+
posts.splice(index, 1);
146+
}
120147
resolve({ data: params.previousData });
121-
}, 1000);
148+
};
122149
});
123150
}),
124151
} as any;
@@ -134,15 +161,13 @@ describe('useDelete', () => {
134161
expect(screen.queryByText('World')).not.toBeNull();
135162
expect(screen.queryByText('mutating')).not.toBeNull();
136163
});
137-
await waitFor(
138-
() => {
139-
expect(screen.queryByText('success')).not.toBeNull();
140-
expect(screen.queryByText('Hello')).toBeNull();
141-
expect(screen.queryByText('World')).not.toBeNull();
142-
expect(screen.queryByText('mutating')).toBeNull();
143-
},
144-
{ timeout: 3000 }
145-
);
164+
resolveDelete?.();
165+
await waitFor(() => {
166+
expect(screen.queryByText('success')).not.toBeNull();
167+
expect(screen.queryByText('Hello')).toBeNull();
168+
expect(screen.queryByText('World')).not.toBeNull();
169+
expect(screen.queryByText('mutating')).toBeNull();
170+
});
146171

147172
expect(dataProvider.delete).toHaveBeenCalledWith('posts', {
148173
id: 1,

packages/ra-core/src/dataProvider/useDelete.stories.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ import { useTakeUndoableMutation } from './undo';
2020

2121
export default { title: 'ra-core/dataProvider/useDelete' };
2222

23-
export const MutationMode = () => {
23+
export const MutationMode = ({
24+
dataProvider,
25+
}: {
26+
dataProvider?: DataProvider;
27+
}) => {
2428
const posts = [
2529
{ id: 1, title: 'Hello' },
2630
{ id: 2, title: 'World' },
2731
];
28-
const dataProvider = {
32+
const defaultDataProvider = {
2933
getList: () => {
3034
return Promise.resolve({
3135
data: posts,
@@ -45,7 +49,7 @@ export const MutationMode = () => {
4549
return (
4650
<CoreAdminContext
4751
queryClient={new QueryClient()}
48-
dataProvider={dataProvider}
52+
dataProvider={dataProvider ?? defaultDataProvider}
4953
>
5054
<MutationModeCore />
5155
</CoreAdminContext>

packages/ra-ui-materialui/src/button/SelectAllButton.spec.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { fireEvent, render, screen } from '@testing-library/react';
2+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
33
import { Basic, Label, Limit, StoreKey } from './SelectAllButton.stories';
44

55
describe('<SelectAllButton />', () => {
@@ -18,8 +18,12 @@ describe('<SelectAllButton />', () => {
1818
await screen.findByRole('button', { name: 'Select all' });
1919
fireEvent.click(screen.getAllByRole('checkbox')[1]);
2020
await screen.findByText('9 items selected');
21-
expect(screen.queryByRole('button', { name: 'Select all' })).toBeNull();
22-
}, 10000);
21+
await waitFor(() => {
22+
expect(
23+
screen.queryByRole('button', { name: 'Select all' })
24+
).toBeNull();
25+
});
26+
});
2327

2428
it('should select all items', async () => {
2529
render(<Basic />);

0 commit comments

Comments
 (0)