Skip to content

Commit

Permalink
Improve createQueries tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lachlancollins committed Jul 17, 2024
1 parent a25c958 commit b6d0296
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
export let queryClient: QueryClient
export let persistOptions: OmitKeyof<PersistQueryClientOptions, 'queryClient'>
export let key: Array<string>
export let onSuccess: () => Promise<void>
export let states: Writable<Array<string>>
</script>

<PersistQueryClientProvider client={queryClient} {persistOptions} {onSuccess}>
<AwaitOnSuccess {key} {states} />
<AwaitOnSuccess {states} />
</PersistQueryClientProvider>
20 changes: 5 additions & 15 deletions packages/svelte-query/tests/createQueries/BaseExample.svelte
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
<script lang="ts">
import { createQueries } from '../../src/createQueries'
import type { QueryClient } from '@tanstack/query-core'
import type { QueriesOptions, QueriesResults } from '../../src/createQueries'
import type { QueriesOptions } from '../../src/createQueries'
export let options: {
queries: [...QueriesOptions<any>]
combine?: (result: QueriesResults<Array<any>>) => any
}
export let queryClient: QueryClient
const queries = createQueries(options, queryClient)
</script>

{#if Array.isArray($queries)}
{#each $queries as query, index}
{#if query.isPending}
<div>Loading {index + 1}</div>
{:else if query.isSuccess}
<div>{query.data}</div>
{/if}
{/each}
{:else if $queries.isPending}
<div>Loading</div>
{:else if $queries.isSuccess}
<div>{$queries.data}</div>
{/if}
{#each $queries as query, index}
<div>Status {index + 1}: {query.status}</div>
<div>Data {index + 1}: {query.data}</div>
{/each}
32 changes: 32 additions & 0 deletions packages/svelte-query/tests/createQueries/CombineExample.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<script lang="ts">
import { createQueries } from '../../src/createQueries'
import { sleep } from '../utils'
import type { QueryClient } from '@tanstack/query-core'
export let queryClient: QueryClient
const ids = [1, 2, 3]
const queries = createQueries(
{
queries: ids.map((id) => ({
queryKey: [id],
queryFn: async () => {
await sleep(5)
return id
},
})),
combine: (results) => {
return {
isPending: results.some((result) => result.isPending),
isSuccess: results.every((result) => result.isSuccess),
data: results.map((res) => res.data).join(','),
}
},
},
queryClient,
)
</script>

<div>isPending: {$queries.isPending}</div>
<div>Data: {$queries.data ?? 'undefined'}</div>
33 changes: 8 additions & 25 deletions packages/svelte-query/tests/createQueries/createQueries.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { render, waitFor } from '@testing-library/svelte'
import { QueryClient } from '@tanstack/query-core'
import { sleep } from '../utils'
import BaseExample from './BaseExample.svelte'
import CombineExample from './CombineExample.svelte'

describe('createQueries', () => {
test('Render and wait for success', async () => {
Expand Down Expand Up @@ -31,47 +32,29 @@ describe('createQueries', () => {
})

await waitFor(() => {
expect(rendered.getByText('Loading 1')).toBeInTheDocument()
expect(rendered.getByText('Loading 2')).toBeInTheDocument()
expect(rendered.getByText('Status 1: pending')).toBeInTheDocument()
expect(rendered.getByText('Status 2: pending')).toBeInTheDocument()
})

await waitFor(() => {
expect(rendered.getByText('Success 1')).toBeInTheDocument()
expect(rendered.getByText('Success 2')).toBeInTheDocument()
expect(rendered.getByText('Status 1: success')).toBeInTheDocument()
expect(rendered.getByText('Status 2: success')).toBeInTheDocument()
})
})

test('Combine queries', async () => {
const ids = [1, 2, 3]

const rendered = render(BaseExample, {
const rendered = render(CombineExample, {
props: {
options: {
queries: ids.map((id) => ({
queryKey: [id],
queryFn: async () => {
await sleep(5)
return id
},
})),
combine: (results) => {
return {
isPending: results.some((result) => result.isPending),
isSuccess: results.every((result) => result.isSuccess),
data: results.map((res) => res.data).join(','),
}
},
},
queryClient: new QueryClient(),
},
})

await waitFor(() => {
expect(rendered.getByText('Loading')).toBeInTheDocument()
expect(rendered.getByText('isPending: true')).toBeInTheDocument()
})

await waitFor(() => {
expect(rendered.getByText('1,2,3')).toBeInTheDocument()
expect(rendered.getByText('Data: 1,2,3')).toBeInTheDocument()
})
})
})

0 comments on commit b6d0296

Please sign in to comment.