Skip to content

Commit 85c3810

Browse files
authored
Merge branch 'main' into test/svelte-query-createQuery-simplify-queryFn-replace-queryByText-getByText
2 parents fb58234 + 80242d6 commit 85c3810

File tree

9 files changed

+68
-82
lines changed

9 files changed

+68
-82
lines changed

examples/react/suspense/src/components/Project.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,11 @@ export default function Project({
2222
<h1>
2323
{activeProject} {isFetching ? <Spinner /> : null}
2424
</h1>
25-
{data ? (
26-
<div>
27-
<p>forks: {data.forks_count}</p>
28-
<p>stars: {data.stargazers_count}</p>
29-
<p>watchers: {data.watchers_count}</p>
30-
</div>
31-
) : null}
25+
<div>
26+
<p>forks: {data.forks_count}</p>
27+
<p>stars: {data.stargazers_count}</p>
28+
<p>watchers: {data.watchers_count}</p>
29+
</div>
3230
<br />
3331
<br />
3432
</div>

packages/svelte-query/tests/createInfiniteQuery/BaseExample.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { createInfiniteQuery } from '../../src/index.js'
44
import type { QueryObserverResult } from '@tanstack/query-core'
55
import type { Writable } from 'svelte/store'
6+
import { sleep } from '@tanstack/query-test-utils'
67
78
export let states: Writable<Array<QueryObserverResult>>
89
@@ -11,7 +12,7 @@
1112
const query = createInfiniteQuery(
1213
{
1314
queryKey: ['test'],
14-
queryFn: ({ pageParam }) => Number(pageParam),
15+
queryFn: ({ pageParam }) => sleep(10).then(() => pageParam),
1516
getNextPageParam: (lastPage) => lastPage + 1,
1617
initialPageParam: 0,
1718
},

packages/svelte-query/tests/createInfiniteQuery/SelectExample.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { createInfiniteQuery } from '../../src/index.js'
44
import type { QueryObserverResult } from '@tanstack/query-core'
55
import type { Writable } from 'svelte/store'
6+
import { sleep } from '@tanstack/query-test-utils'
67
78
export let states: Writable<Array<QueryObserverResult>>
89
@@ -11,7 +12,7 @@
1112
const query = createInfiniteQuery(
1213
{
1314
queryKey: ['test'],
14-
queryFn: () => Promise.resolve({ count: 1 }),
15+
queryFn: () => sleep(10).then(() => ({ count: 1 })),
1516
select: (data) => ({
1617
pages: data.pages.map((x) => `count: ${x.count}`),
1718
pageParams: data.pageParams,

packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@ describe('createInfiniteQuery', () => {
2424
},
2525
})
2626

27-
await vi.advanceTimersByTimeAsync(0)
28-
expect(rendered.queryByText('Status: success')).toBeInTheDocument()
27+
await vi.advanceTimersByTimeAsync(11)
28+
expect(rendered.getByText('Status: success')).toBeInTheDocument()
2929

3030
const states = get(statesStore)
3131

3232
expect(states).toHaveLength(2)
33-
3433
expect(states[0]).toEqual({
3534
data: undefined,
3635
dataUpdatedAt: 0,
@@ -67,7 +66,6 @@ describe('createInfiniteQuery', () => {
6766
fetchStatus: 'fetching',
6867
promise: expect.any(Promise),
6968
})
70-
7169
expect(states[1]).toEqual({
7270
data: { pages: [0], pageParams: [0] },
7371
dataUpdatedAt: expect.any(Number),
@@ -115,18 +113,16 @@ describe('createInfiniteQuery', () => {
115113
},
116114
})
117115

118-
await vi.advanceTimersByTimeAsync(0)
119-
expect(rendered.queryByText('count: 1')).toBeInTheDocument()
116+
await vi.advanceTimersByTimeAsync(11)
117+
expect(rendered.getByText('count: 1')).toBeInTheDocument()
120118

121119
const states = get(statesStore)
122120

123121
expect(states).toHaveLength(2)
124-
125122
expect(states[0]).toMatchObject({
126123
data: undefined,
127124
isSuccess: false,
128125
})
129-
130126
expect(states[1]).toMatchObject({
131127
data: { pages: ['count: 1'] },
132128
isSuccess: true,

packages/svelte-query/tests/createMutation/OnSuccessExample.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { writable } from 'svelte/store'
33
import { QueryClient } from '@tanstack/query-core'
44
import { createMutation, setQueryClientContext } from '../../src/index.js'
5+
import { sleep } from '@tanstack/query-test-utils'
56
67
export let onSuccessMock: any
78
export let onSettledMock: any
@@ -12,7 +13,7 @@
1213
setQueryClientContext(queryClient)
1314
1415
const mutation = createMutation({
15-
mutationFn: (vars: { count: number }) => Promise.resolve(vars.count),
16+
mutationFn: (vars: { count: number }) => sleep(10).then(() => vars.count),
1617
onSuccess: (data) => {
1718
onSuccessMock(data)
1819
},

packages/svelte-query/tests/createMutation/ResetExample.svelte

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
<script lang="ts">
22
import { QueryClient } from '@tanstack/query-core'
33
import { createMutation, setQueryClientContext } from '../../src/index.js'
4+
import { sleep } from '@tanstack/query-test-utils'
45
56
const queryClient = new QueryClient()
67
setQueryClientContext(queryClient)
78
89
const mutation = createMutation({
9-
mutationFn: () => {
10-
const err = new Error('Expected mock error')
11-
err.stack = ''
12-
return Promise.reject(err)
13-
},
10+
mutationFn: () =>
11+
sleep(10).then(() => Promise.reject(new Error('Expected mock error'))),
1412
})
1513
</script>
1614

packages/svelte-query/tests/createMutation/createMutation.test.ts

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@ describe('createMutation', () => {
2020
expect(rendered.queryByText('Error: undefined')).toBeInTheDocument()
2121

2222
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
23-
await vi.advanceTimersByTimeAsync(0)
24-
expect(
25-
rendered.queryByText('Error: Expected mock error'),
26-
).toBeInTheDocument()
23+
await vi.advanceTimersByTimeAsync(11)
24+
expect(rendered.getByText('Error: Expected mock error')).toBeInTheDocument()
2725

2826
fireEvent.click(rendered.getByRole('button', { name: /Reset/i }))
29-
await vi.advanceTimersByTimeAsync(0)
30-
expect(rendered.queryByText('Error: undefined')).toBeInTheDocument()
27+
await vi.advanceTimersByTimeAsync(11)
28+
expect(rendered.getByText('Error: undefined')).toBeInTheDocument()
3129
})
3230

3331
test('Able to call `onSuccess` and `onSettled` after each successful mutate', async () => {
@@ -46,7 +44,7 @@ describe('createMutation', () => {
4644
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
4745
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
4846
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
49-
await vi.advanceTimersByTimeAsync(0)
47+
await vi.advanceTimersByTimeAsync(11)
5048
expect(rendered.queryByText('Count: 3')).toBeInTheDocument()
5149

5250
expect(onSuccessMock).toHaveBeenCalledTimes(3)
@@ -67,14 +65,11 @@ describe('createMutation', () => {
6765

6866
const mutationFn = vi.fn<(value: Value) => Promise<Value>>()
6967

70-
mutationFn.mockImplementationOnce(() => {
71-
return Promise.reject(`Expected mock error`)
72-
})
68+
mutationFn.mockImplementationOnce(() =>
69+
sleep(20).then(() => Promise.reject(`Expected mock error`)),
70+
)
7371

74-
mutationFn.mockImplementation(async (value) => {
75-
await sleep(5)
76-
return Promise.resolve(value)
77-
})
72+
mutationFn.mockImplementation((value) => sleep(10).then(() => value))
7873

7974
const rendered = render(FailureExample, {
8075
props: {
@@ -86,7 +81,7 @@ describe('createMutation', () => {
8681

8782
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
8883
expect(rendered.getByText('Data: undefined')).toBeInTheDocument()
89-
await vi.advanceTimersByTimeAsync(0)
84+
await vi.advanceTimersByTimeAsync(21)
9085
expect(rendered.getByText('Status: error')).toBeInTheDocument()
9186
expect(rendered.getByText('Failure Count: 1')).toBeInTheDocument()
9287
expect(
@@ -96,7 +91,7 @@ describe('createMutation', () => {
9691
fireEvent.click(rendered.getByRole('button', { name: /Mutate/i }))
9792
await vi.advanceTimersByTimeAsync(0)
9893
expect(rendered.getByText('Status: pending')).toBeInTheDocument()
99-
await vi.advanceTimersByTimeAsync(6)
94+
await vi.advanceTimersByTimeAsync(11)
10095
expect(rendered.getByText('Status: success')).toBeInTheDocument()
10196
expect(rendered.getByText('Data: 2')).toBeInTheDocument()
10297
expect(rendered.getByText('Failure Count: 0')).toBeInTheDocument()

packages/svelte-query/tests/useMutationState/BaseExample.svelte

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,5 @@
2828
{JSON.stringify(statuses)}
2929
</div>
3030

31-
<button data-testid="success" on:click={() => $successMutation.mutate()}>
32-
Click
33-
</button>
34-
<button data-testid="error" on:click={() => $errorMutation.mutate()}>
35-
Click
36-
</button>
31+
<button on:click={() => $successMutation.mutate()}>success</button>
32+
<button on:click={() => $errorMutation.mutate()}>error</button>
Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
22
import { fireEvent, render } from '@testing-library/svelte'
3+
import { sleep } from '@tanstack/query-test-utils'
34
import BaseExample from './BaseExample.svelte'
45

56
describe('useMutationState', () => {
@@ -12,105 +13,104 @@ describe('useMutationState', () => {
1213
})
1314

1415
test('Run few mutation functions and check from useMutationState', async () => {
15-
const successMutationFn = vi.fn()
16-
const errorMutationFn = vi.fn().mockImplementation(() => {
17-
throw 'error'
18-
})
16+
const successMutationFn = vi.fn(() => sleep(10).then(() => 'data'))
17+
const errorMutationFn = vi
18+
.fn()
19+
.mockImplementation(() =>
20+
sleep(20).then(() => Promise.reject(new Error('error'))),
21+
)
1922

2023
const rendered = render(BaseExample, {
2124
props: {
2225
successMutationOpts: {
2326
mutationKey: ['success'],
2427
mutationFn: successMutationFn,
2528
},
26-
2729
errorMutationOpts: {
2830
mutationKey: ['error'],
2931
mutationFn: errorMutationFn,
3032
},
3133
},
3234
})
3335

34-
fireEvent.click(rendered.getByTestId('success'))
35-
await vi.advanceTimersByTimeAsync(0)
36+
fireEvent.click(rendered.getByText('success'))
37+
await vi.advanceTimersByTimeAsync(11)
3638
expect(successMutationFn).toHaveBeenCalledTimes(1)
37-
expect(rendered.getByTestId('result').innerHTML).toEqual('["success"]')
39+
expect(rendered.getByText('["success"]')).toBeInTheDocument()
3840

39-
fireEvent.click(rendered.getByTestId('error'))
40-
await vi.advanceTimersByTimeAsync(0)
41+
fireEvent.click(rendered.getByText('error'))
42+
await vi.advanceTimersByTimeAsync(21)
4143
expect(errorMutationFn).toHaveBeenCalledTimes(1)
42-
expect(rendered.getByTestId('result').innerHTML).toEqual(
43-
'["success","error"]',
44-
)
44+
expect(rendered.getByText('["success","error"]')).toBeInTheDocument()
4545
})
4646

4747
test('Can select specific type of mutation ( i.e: error only )', async () => {
48-
const successMutationFn = vi.fn()
49-
const errorMutationFn = vi.fn().mockImplementation(() => {
50-
throw 'error'
51-
})
48+
const successMutationFn = vi.fn(() => sleep(10).then(() => 'data'))
49+
const errorMutationFn = vi
50+
.fn()
51+
.mockImplementation(() =>
52+
sleep(20).then(() => Promise.reject(new Error('error'))),
53+
)
5254

5355
const rendered = render(BaseExample, {
5456
props: {
5557
successMutationOpts: {
5658
mutationKey: ['success'],
5759
mutationFn: successMutationFn,
5860
},
59-
6061
errorMutationOpts: {
6162
mutationKey: ['error'],
6263
mutationFn: errorMutationFn,
6364
},
64-
6565
mutationStateOpts: {
6666
filters: { status: 'error' },
6767
},
6868
},
6969
})
7070

71-
fireEvent.click(rendered.getByTestId('success'))
72-
await vi.advanceTimersByTimeAsync(0)
71+
fireEvent.click(rendered.getByText('success'))
72+
await vi.advanceTimersByTimeAsync(11)
7373
expect(successMutationFn).toHaveBeenCalledTimes(1)
74-
expect(rendered.getByTestId('result').innerHTML).toEqual('[]')
74+
expect(rendered.getByText('[]')).toBeInTheDocument()
7575

76-
fireEvent.click(rendered.getByTestId('error'))
77-
await vi.advanceTimersByTimeAsync(0)
76+
fireEvent.click(rendered.getByText('error'))
77+
await vi.advanceTimersByTimeAsync(21)
7878
expect(errorMutationFn).toHaveBeenCalledTimes(1)
79-
expect(rendered.getByTestId('result').innerHTML).toEqual('["error"]')
79+
expect(rendered.getByText('["error"]')).toBeInTheDocument()
8080
})
8181

8282
test('Can select specific mutation using mutation key', async () => {
83-
const successMutationFn = vi.fn()
84-
const errorMutationFn = vi.fn().mockImplementation(() => {
85-
throw 'error'
86-
})
83+
const successMutationFn = vi.fn(() => sleep(10).then(() => 'data'))
84+
const errorMutationFn = vi
85+
.fn()
86+
.mockImplementation(() =>
87+
sleep(20).then(() => Promise.reject(new Error('error'))),
88+
)
8789

8890
const rendered = render(BaseExample, {
8991
props: {
9092
successMutationOpts: {
9193
mutationKey: ['success'],
9294
mutationFn: successMutationFn,
9395
},
94-
9596
errorMutationOpts: {
9697
mutationKey: ['error'],
9798
mutationFn: errorMutationFn,
9899
},
99-
100100
mutationStateOpts: {
101101
filters: { mutationKey: ['success'] },
102102
},
103103
},
104104
})
105105

106-
fireEvent.click(rendered.getByTestId('success'))
107-
await vi.advanceTimersByTimeAsync(0)
106+
fireEvent.click(rendered.getByText('success'))
107+
await vi.advanceTimersByTimeAsync(11)
108108
expect(successMutationFn).toHaveBeenCalledTimes(1)
109-
expect(rendered.getByTestId('result').innerHTML).toEqual('["success"]')
109+
expect(rendered.getByText('["success"]')).toBeInTheDocument()
110110

111-
fireEvent.click(rendered.getByTestId('error'))
112-
await vi.advanceTimersByTimeAsync(0)
111+
fireEvent.click(rendered.getByText('error'))
112+
await vi.advanceTimersByTimeAsync(21)
113113
expect(errorMutationFn).toHaveBeenCalledTimes(1)
114-
expect(rendered.getByTestId('result').innerHTML).toEqual('["success"]')
114+
expect(rendered.getByText('["success"]')).toBeInTheDocument()
115115
})
116116
})

0 commit comments

Comments
 (0)