Skip to content

Commit a08247b

Browse files
committed
chore: migrate cookbook
1 parent fe6f3d2 commit a08247b

File tree

18 files changed

+231
-150
lines changed

18 files changed

+231
-150
lines changed

examples/cookbook/app/custom-render/__tests__/index.test.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ import { screen } from '@testing-library/react-native';
33
import WelcomeScreen from '../WelcomeScreen';
44
import { renderWithProviders } from './test-utils';
55

6-
test('renders WelcomeScreen in light theme', () => {
7-
renderWithProviders(<WelcomeScreen />, { theme: 'light' });
6+
test('renders WelcomeScreen in light theme', async () => {
7+
await renderWithProviders(<WelcomeScreen />, { theme: 'light' });
88
expect(screen.getByText('Theme: light')).toBeOnTheScreen();
99
});
1010

11-
test('renders WelcomeScreen in dark theme', () => {
12-
renderWithProviders(<WelcomeScreen />, { theme: 'dark' });
11+
test('renders WelcomeScreen in dark theme', async () => {
12+
await renderWithProviders(<WelcomeScreen />, { theme: 'dark' });
1313
expect(screen.getByText('Theme: dark')).toBeOnTheScreen();
1414
});
1515

16-
test('renders WelcomeScreen with user', () => {
17-
renderWithProviders(<WelcomeScreen />, { user: { name: 'Jar-Jar' } });
16+
test('renders WelcomeScreen with user', async () => {
17+
await renderWithProviders(<WelcomeScreen />, { user: { name: 'Jar-Jar' } });
1818
expect(screen.getByText(/hello Jar-Jar/i)).toBeOnTheScreen();
1919
});
2020

21-
test('renders WelcomeScreen without user', () => {
22-
renderWithProviders(<WelcomeScreen />, { user: null });
21+
test('renders WelcomeScreen without user', async () => {
22+
await renderWithProviders(<WelcomeScreen />, { user: null });
2323
expect(screen.getByText(/hello stranger/i)).toBeOnTheScreen();
2424
});

examples/cookbook/app/custom-render/__tests__/test-utils.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ interface RenderWithProvidersProps {
88
theme?: Theme;
99
}
1010

11-
export function renderWithProviders<T>(
11+
export async function renderWithProviders<T>(
1212
ui: React.ReactElement<T>,
1313
options?: RenderWithProvidersProps,
1414
) {
15-
return render(
15+
return await render(
1616
<UserProvider.Provider value={options?.user ?? null}>
1717
<ThemeProvider.Provider value={options?.theme ?? 'light'}>{ui}</ThemeProvider.Provider>
1818
</UserProvider.Provider>,

examples/cookbook/app/network-requests/__tests__/PhoneBook.test.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ jest.setTimeout(10000);
1010

1111
describe('PhoneBook', () => {
1212
it('fetches all contacts and favorites successfully and renders lists in sections correctly', async () => {
13-
render(<PhoneBook />);
13+
await render(<PhoneBook />);
1414

15-
await waitForElementToBeRemoved(() => screen.getByText(/users data not quite there yet/i));
1615
expect(await screen.findByText('Name: Mrs Ida Kristensen')).toBeOnTheScreen();
1716
expect(await screen.findByText('Email: ida.kristensen@example.com')).toBeOnTheScreen();
1817
expect(await screen.findAllByText(/name/i)).toHaveLength(3);
@@ -22,19 +21,17 @@ describe('PhoneBook', () => {
2221

2322
it('fails to fetch all contacts and renders error message', async () => {
2423
mockServerFailureForGetAllContacts();
25-
render(<PhoneBook />);
24+
await render(<PhoneBook />);
2625

27-
await waitForElementToBeRemoved(() => screen.getByText(/users data not quite there yet/i));
2826
expect(
2927
await screen.findByText(/an error occurred: error fetching contacts/i),
3028
).toBeOnTheScreen();
3129
});
3230

3331
it('fails to fetch favorites and renders error message', async () => {
3432
mockServerFailureForGetAllFavorites();
35-
render(<PhoneBook />);
33+
await render(<PhoneBook />);
3634

37-
await waitForElementToBeRemoved(() => screen.getByText(/figuring out your favorites/i));
3835
expect(await screen.findByText(/error fetching favorites/i)).toBeOnTheScreen();
3936
});
4037
});

examples/cookbook/app/state-management/jotai/__tests__/TaskList.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import { renderWithAtoms } from './test-utils';
77

88
jest.useFakeTimers();
99

10-
test('renders an empty task list', () => {
11-
render(<TaskList />);
10+
test('renders an empty task list', async () => {
11+
await render(<TaskList />);
1212
expect(screen.getByText(/no tasks, start by adding one/i)).toBeOnTheScreen();
1313
});
1414

1515
const INITIAL_TASKS: Task[] = [{ id: '1', title: 'Buy bread' }];
1616

1717
test('renders a to do list with 1 items initially, and adds a new item', async () => {
18-
renderWithAtoms(<TaskList />, {
18+
await renderWithAtoms(<TaskList />, {
1919
initialValues: [
2020
[tasksAtom, INITIAL_TASKS],
2121
[newTaskTitleAtom, ''],

examples/cookbook/app/state-management/jotai/__tests__/test-utils.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ export interface RenderWithAtomsOptions {
1717
* @param options - The render options including the initial atom values.
1818
* @returns The render result from `@testing-library/react-native`.
1919
*/
20-
export const renderWithAtoms = <T,>(
20+
export const renderWithAtoms = async <T,>(
2121
component: React.ReactElement,
2222
options: RenderWithAtomsOptions,
2323
) => {
24-
return render(
24+
return await render(
2525
<HydrateAtomsWrapper initialValues={options.initialValues}>{component}</HydrateAtomsWrapper>,
2626
);
2727
};

examples/cookbook/basics-tutorial-react-strict-dom/1-basics-rsd.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ function Greeting({ name = 'World' }) {
1111
}
1212

1313
describe('Greeting', () => {
14-
it('should render', () => {
14+
it('should render', async () => {
1515
// Arrange
16-
render(<Greeting />);
16+
await render(<Greeting />);
1717

1818
// Assert
1919
expect(screen.getByText('Hello, World!')).toBeOnTheScreen();
2020
});
2121

22-
it('should render with the correct name', () => {
22+
it('should render with the correct name', async () => {
2323
// Arrange
24-
render(<Greeting name="John" />);
24+
await render(<Greeting name="John" />);
2525

2626
// Assert
2727
expect(screen.getByText('Hello, John!')).toBeOnTheScreen();

examples/cookbook/basics-tutorial-react-strict-dom/2.1-query-variants-rsd.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as React from 'react';
22
import { html } from 'react-strict-dom';
33
import { render, screen } from '@testing-library/react-native';
44

5-
test('showcase query variants', () => {
6-
render(
5+
test('showcase query variants', async () => {
6+
await render(
77
<html.div>
88
<html.span>Item 1</html.span>
99
<html.span>Item 2</html.span>
@@ -33,7 +33,7 @@ function LazyText({ content }: { content: string }) {
3333
}
3434

3535
test('showcase async query variants', async () => {
36-
render(
36+
await render(
3737
<html.div>
3838
<LazyText content="Lazy Item 1" />
3939
<LazyText content="Lazy Item 2" />

examples/cookbook/basics-tutorial-react-strict-dom/2.2-query-predicates-rsd.test.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as React from 'react';
22
import { html } from 'react-strict-dom';
33
import { render, screen } from '@testing-library/react-native';
44

5-
test('query by semantic role: *ByRole (highly recommended)', () => {
6-
render(
5+
test('query by semantic role: *ByRole (highly recommended)', async () => {
6+
await render(
77
<html.div>
88
<html.h1>Heading Text</html.h1>
99

@@ -28,8 +28,8 @@ test('query by semantic role: *ByRole (highly recommended)', () => {
2828
// expect(screen.getAllByRole('menuitem')).toHaveLength(2);
2929
});
3030

31-
test('querying TextInput elements (recommended)', () => {
32-
render(
31+
test('querying TextInput elements (recommended)', async () => {
32+
await render(
3333
<html.div>
3434
<html.input placeholder="Enter Text..." aria-label="Text Label" defaultValue="Hello" />
3535
</html.div>,
@@ -45,8 +45,8 @@ test('querying TextInput elements (recommended)', () => {
4545
expect(screen.getByDisplayValue('Hello')).toBeOnTheScreen();
4646
});
4747

48-
test('other accessible queries (ok)', () => {
49-
render(
48+
test('other accessible queries (ok)', async () => {
49+
await render(
5050
<html.div>
5151
<html.span>Text content</html.span>
5252
<html.div aria-label="ARIA Label" />
@@ -57,8 +57,8 @@ test('other accessible queries (ok)', () => {
5757
expect(screen.getByLabelText('ARIA Label')).toBeOnTheScreen();
5858
});
5959

60-
test('escape hatch: *ByTestId (use as a last resort)', () => {
61-
render(
60+
test('escape hatch: *ByTestId (use as a last resort)', async () => {
61+
await render(
6262
<html.div>
6363
<html.span data-testid="Text 1">Text 1</html.span>
6464
</html.div>,

examples/cookbook/basics-tutorial-react-strict-dom/3-jest-matchers-rsd.test.tsx

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as React from 'react';
22
import { render, screen } from '@testing-library/react-native';
33
import { html, css } from 'react-strict-dom';
44

5-
test('showcase: toBeOnTheScreen', () => {
6-
render(
5+
test('showcase: toBeOnTheScreen', async () => {
6+
await render(
77
<html.div>
88
<html.div data-testid="view" />
99
</html.div>,
@@ -13,8 +13,8 @@ test('showcase: toBeOnTheScreen', () => {
1313
expect(screen.queryByTestId('non-existent')).not.toBeOnTheScreen();
1414
});
1515

16-
test('showcase: toBeIntoHaveTextContentTheDocument', () => {
17-
render(
16+
test('showcase: toBeIntoHaveTextContentTheDocument', async () => {
17+
await render(
1818
<html.div>
1919
<html.p data-testid="text">Hello World</html.p>
2020
</html.div>,
@@ -25,8 +25,8 @@ test('showcase: toBeIntoHaveTextContentTheDocument', () => {
2525
expect(screen.getByTestId('text')).toHaveTextContent('Hello', { exact: false });
2626
});
2727

28-
test('showcase: toContainElement', () => {
29-
render(
28+
test('showcase: toContainElement', async () => {
29+
await render(
3030
<html.div>
3131
<html.div data-testid="outer">
3232
<html.div data-testid="inner" />
@@ -39,8 +39,8 @@ test('showcase: toContainElement', () => {
3939
expect(screen.getByTestId('outer')).not.toContainElement(screen.getByTestId('outer-2'));
4040
});
4141

42-
test('showcase: toBeEmptyElement', () => {
43-
render(
42+
test('showcase: toBeEmptyElement', async () => {
43+
await render(
4444
<html.div>
4545
<html.div data-testid="empty" />
4646
<html.div data-testid="not-empty">
@@ -53,8 +53,8 @@ test('showcase: toBeEmptyElement', () => {
5353
expect(screen.getByTestId('not-empty')).not.toBeEmptyElement();
5454
});
5555

56-
test('showcase: toHaveDisplayValue', () => {
57-
render(
56+
test('showcase: toHaveDisplayValue', async () => {
57+
await render(
5858
<html.div>
5959
<html.input data-testid="input" value="Hello" />
6060
</html.div>,
@@ -63,8 +63,8 @@ test('showcase: toHaveDisplayValue', () => {
6363
expect(screen.getByTestId('input')).toHaveDisplayValue('Hello');
6464
});
6565

66-
test('showcase: toHaveAccessibilityValue', () => {
67-
render(
66+
test('showcase: toHaveAccessibilityValue', async () => {
67+
await render(
6868
<html.div>
6969
<html.div
7070
data-testid="view"
@@ -81,8 +81,8 @@ test('showcase: toHaveAccessibilityValue', () => {
8181
expect(screen.getByTestId('view')).toHaveAccessibilityValue({ now: 33, min: 0, max: 100 });
8282
});
8383

84-
test('showcase: toBeEnabled/toBeDisabled', () => {
85-
render(
84+
test('showcase: toBeEnabled/toBeDisabled', async () => {
85+
await render(
8686
<html.div>
8787
<html.div data-testid="enabled" aria-disabled={false} />
8888
<html.div data-testid="disabled" aria-disabled />
@@ -95,8 +95,8 @@ test('showcase: toBeEnabled/toBeDisabled', () => {
9595
expect(screen.getByTestId('disabled')).not.toBeEnabled();
9696
});
9797

98-
test('showcase: toBeSelected', () => {
99-
render(
98+
test('showcase: toBeSelected', async () => {
99+
await render(
100100
<html.div>
101101
<html.div data-testid="selected" aria-selected />
102102
<html.div data-testid="not-selected" />
@@ -107,8 +107,8 @@ test('showcase: toBeSelected', () => {
107107
expect(screen.getByTestId('not-selected')).not.toBeSelected();
108108
});
109109

110-
test('showcase: toBeBusy', () => {
111-
render(
110+
test('showcase: toBeBusy', async () => {
111+
await render(
112112
<html.div>
113113
<html.div data-testid="busy" aria-busy />
114114
<html.div data-testid="not-busy" />
@@ -119,8 +119,8 @@ test('showcase: toBeBusy', () => {
119119
expect(screen.getByTestId('not-busy')).not.toBeBusy();
120120
});
121121

122-
test('showcase: toBeExpanded/toBeCollapsed', () => {
123-
render(
122+
test('showcase: toBeExpanded/toBeCollapsed', async () => {
123+
await render(
124124
<html.div>
125125
<html.div data-testid="expanded" aria-expanded />
126126
<html.div data-testid="collapsed" aria-expanded={false} />
@@ -138,8 +138,8 @@ test('showcase: toBeExpanded/toBeCollapsed', () => {
138138
expect(screen.getByTestId('default')).not.toBeExpanded();
139139
});
140140

141-
test('showcase: toBeVisible', () => {
142-
render(
141+
test('showcase: toBeVisible', async () => {
142+
await render(
143143
<html.div>
144144
<html.div data-testid="visible" />
145145
<html.div data-testid="not-visible" style={styles.opacityZero} />
@@ -150,8 +150,8 @@ test('showcase: toBeVisible', () => {
150150
expect(screen.getByTestId('not-visible')).not.toBeVisible();
151151
});
152152

153-
test('showcase: toHaveStyle', () => {
154-
render(
153+
test('showcase: toHaveStyle', async () => {
154+
await render(
155155
<html.div>
156156
<html.span data-testid="text" style={styles.fontSize16}>
157157
Hello World
@@ -163,8 +163,8 @@ test('showcase: toHaveStyle', () => {
163163
expect(screen.getByTestId('text')).not.toHaveStyle({ fontSize: 12 });
164164
});
165165

166-
test('showcase: toHaveProp', () => {
167-
render(
166+
test('showcase: toHaveProp', async () => {
167+
await render(
168168
<html.div>
169169
<html.p data-testid="text" aria-label="Hello World" />
170170
</html.div>,

examples/cookbook/basics-tutorial-react-strict-dom/4-events-rsd.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ test('Counter should increment the count when the button is pressed', async () =
6464
const user = userEvent.setup();
6565

6666
// Render the component
67-
render(<Counter />);
67+
await render(<Counter />);
6868

6969
// Verify initial state
7070
expect(screen.getByText('0')).toBeOnTheScreen();
@@ -150,7 +150,7 @@ function LoginForm() {
150150
*/
151151
test('should login with valid credentials', async () => {
152152
const user = userEvent.setup();
153-
render(<LoginForm />);
153+
await render(<LoginForm />);
154154

155155
// Simulate typing in the email field
156156
await user.type(screen.getByPlaceholderText('Email'), 'test@test.com');
@@ -181,7 +181,7 @@ test('should login with valid credentials', async () => {
181181
*/
182182
test('should show error message with invalid credentials', async () => {
183183
const user = userEvent.setup();
184-
render(<LoginForm />);
184+
await render(<LoginForm />);
185185

186186
// Enter valid email but invalid password
187187
await user.type(screen.getByPlaceholderText('Email'), 'test@test.com');

0 commit comments

Comments
 (0)