Skip to content

Commit 730f556

Browse files
committed
add render prop on ReferenceArrayFieldBase
1 parent 4e0ebea commit 730f556

File tree

4 files changed

+432
-22
lines changed

4 files changed

+432
-22
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import * as React from 'react';
2+
import { render, screen, waitFor } from '@testing-library/react';
3+
import {
4+
Basic,
5+
Errored,
6+
Loading,
7+
WithPagination,
8+
WithRenderProp,
9+
} from './ReferenceArrayFieldBase.stories';
10+
11+
import { ReferenceArrayFieldBase } from './ReferenceArrayFieldBase';
12+
import { useResourceContext } from '../../core/useResourceContext';
13+
import { testDataProvider } from '../../dataProvider/testDataProvider';
14+
import { CoreAdminContext } from '../../core/CoreAdminContext';
15+
16+
describe('ReferenceArrayFieldBase', () => {
17+
it('should display an error if error is defined', async () => {
18+
jest.spyOn(console, 'error')
19+
.mockImplementationOnce(() => {})
20+
.mockImplementationOnce(() => {});
21+
22+
render(<Errored />);
23+
await waitFor(() => {
24+
expect(screen.queryByText('Error: Error')).not.toBeNull();
25+
});
26+
});
27+
28+
it('should pass the loading state', async () => {
29+
jest.spyOn(console, 'error')
30+
.mockImplementationOnce(() => {})
31+
.mockImplementationOnce(() => {});
32+
33+
render(<Loading />);
34+
await waitFor(() => {
35+
expect(screen.queryByText('Loading...')).not.toBeNull();
36+
});
37+
});
38+
it('should pass the correct resource down to child component', async () => {
39+
const MyComponent = () => {
40+
const resource = useResourceContext();
41+
return <div>{resource}</div>;
42+
};
43+
const dataProvider = testDataProvider({
44+
// @ts-ignore
45+
getList: () =>
46+
Promise.resolve({ data: [{ id: 1 }, { id: 2 }], total: 2 }),
47+
});
48+
render(
49+
<CoreAdminContext dataProvider={dataProvider}>
50+
<ReferenceArrayFieldBase reference="posts" source="post_id">
51+
<MyComponent />
52+
</ReferenceArrayFieldBase>
53+
</CoreAdminContext>
54+
);
55+
await waitFor(() => {
56+
expect(screen.queryByText('posts')).not.toBeNull();
57+
});
58+
});
59+
60+
it('should render the data', async () => {
61+
render(<Basic />);
62+
await waitFor(() => {
63+
expect(screen.queryByText('John Lennon')).not.toBeNull();
64+
expect(screen.queryByText('Paul McCartney')).not.toBeNull();
65+
expect(screen.queryByText('Ringo Star')).not.toBeNull();
66+
expect(screen.queryByText('George Harrison')).not.toBeNull();
67+
expect(screen.queryByText('Mick Jagger')).not.toBeNull();
68+
expect(screen.queryByText('Keith Richards')).not.toBeNull();
69+
expect(screen.queryByText('Ronnie Wood')).not.toBeNull();
70+
expect(screen.queryByText('Charlie Watts')).not.toBeNull();
71+
});
72+
});
73+
74+
it('should render pagination', async () => {
75+
render(<WithPagination />);
76+
await waitFor(() => {
77+
expect(screen.queryByText('1 - 3 of 8')).not.toBeNull();
78+
expect(screen.queryByText('Next Page')).not.toBeNull();
79+
expect(screen.queryByText('Previous Page')).not.toBeNull();
80+
});
81+
screen.getByText('Next Page').click();
82+
await waitFor(() => {
83+
expect(screen.queryByText('4 - 6 of 8')).not.toBeNull();
84+
});
85+
screen.getByText('Previous Page').click();
86+
87+
await waitFor(() => {
88+
expect(screen.queryByText('1 - 3 of 8')).not.toBeNull();
89+
});
90+
});
91+
92+
it('should support renderProp', async () => {
93+
render(<WithRenderProp />);
94+
await waitFor(() => {
95+
expect(screen.queryByText('John Lennon')).not.toBeNull();
96+
expect(screen.queryByText('Paul McCartney')).not.toBeNull();
97+
expect(screen.queryByText('Ringo Star')).not.toBeNull();
98+
expect(screen.queryByText('George Harrison')).not.toBeNull();
99+
expect(screen.queryByText('Mick Jagger')).not.toBeNull();
100+
expect(screen.queryByText('Keith Richards')).not.toBeNull();
101+
expect(screen.queryByText('Ronnie Wood')).not.toBeNull();
102+
expect(screen.queryByText('Charlie Watts')).not.toBeNull();
103+
});
104+
});
105+
106+
it('should render pagination using renderPagination prop', async () => {
107+
render(<WithPagination />);
108+
await waitFor(() => {
109+
expect(screen.queryByText('1 - 3 of 8')).not.toBeNull();
110+
expect(screen.queryByText('Next Page')).not.toBeNull();
111+
expect(screen.queryByText('Previous Page')).not.toBeNull();
112+
});
113+
screen.getByText('Next Page').click();
114+
await waitFor(() => {
115+
expect(screen.queryByText('4 - 6 of 8')).not.toBeNull();
116+
});
117+
screen.getByText('Previous Page').click();
118+
119+
await waitFor(() => {
120+
expect(screen.queryByText('1 - 3 of 8')).not.toBeNull();
121+
});
122+
});
123+
});

0 commit comments

Comments
 (0)