mirror of
https://github.com/langgenius/dify.git
synced 2026-07-21 02:28:30 +08:00
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { QueryClient } from '@tanstack/react-query'
|
|
import { createStore } from 'jotai'
|
|
import { describe, expect, it, vi } from 'vitest'
|
|
import { atomWithResolvedSuspenseQuery } from './query-atoms'
|
|
|
|
const createQueryClient = () =>
|
|
new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
retry: false,
|
|
},
|
|
},
|
|
})
|
|
|
|
describe('atomWithResolvedSuspenseQuery', () => {
|
|
it('should return the resolved suspense query result when query data is cached', () => {
|
|
const queryClient = createQueryClient()
|
|
const queryKey = ['resolved-query']
|
|
queryClient.setQueryData(queryKey, 'cached data')
|
|
|
|
const queryAtom = atomWithResolvedSuspenseQuery(
|
|
() => ({
|
|
queryKey,
|
|
queryFn: async () => 'fetched data',
|
|
}),
|
|
() => queryClient,
|
|
)
|
|
const store = createStore()
|
|
|
|
const result = store.get(queryAtom)
|
|
|
|
expect(result.data).toBe('cached data')
|
|
expect(result.isSuccess).toBe(true)
|
|
})
|
|
|
|
it('should throw when the suspense query is still pending', () => {
|
|
const queryClient = createQueryClient()
|
|
const queryKey = ['pending-query']
|
|
const queryFn = vi.fn(() => new Promise<string>(() => {}))
|
|
|
|
const queryAtom = atomWithResolvedSuspenseQuery(
|
|
() => ({
|
|
queryKey,
|
|
queryFn,
|
|
}),
|
|
() => queryClient,
|
|
)
|
|
const store = createStore()
|
|
|
|
expect(() => store.get(queryAtom)).toThrow(
|
|
'Suspense query must be resolved before reading: ["pending-query"]',
|
|
)
|
|
expect(queryFn).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it('should keep the wrapped suspense query atom writable', () => {
|
|
const queryClient = createQueryClient()
|
|
const queryKey = ['writable-query']
|
|
queryClient.setQueryData(queryKey, 'cached data')
|
|
|
|
const queryAtom = atomWithResolvedSuspenseQuery(
|
|
() => ({
|
|
queryKey,
|
|
queryFn: async () => 'fetched data',
|
|
}),
|
|
() => queryClient,
|
|
)
|
|
const store = createStore()
|
|
|
|
expect(() => store.set(queryAtom)).not.toThrow()
|
|
})
|
|
})
|