fix(web): slient snippet draft fetching

This commit is contained in:
JzoNg 2026-04-16 12:29:07 +08:00
parent d776fc0827
commit 129f681c59
2 changed files with 81 additions and 2 deletions

View File

@ -0,0 +1,78 @@
import type { ReactNode } from 'react'
import type { SnippetWorkflow } from '@/types/snippet'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { renderHook, waitFor } from '@testing-library/react'
import { get } from '../base'
import { useSnippetDraftWorkflow } from '../use-snippet-workflows'
const { draftWorkflowQueryOptions } = vi.hoisted(() => ({
draftWorkflowQueryOptions: vi.fn(),
}))
vi.mock('../base', () => ({
get: vi.fn(),
}))
vi.mock('@/service/client', () => ({
consoleQuery: {
snippets: {
draftWorkflow: {
queryOptions: draftWorkflowQueryOptions,
},
},
},
}))
const mockGet = vi.mocked(get)
const createWrapper = () => {
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: false,
},
},
})
return ({ children }: { children: ReactNode }) => (
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
)
}
describe('useSnippetDraftWorkflow', () => {
beforeEach(() => {
vi.clearAllMocks()
draftWorkflowQueryOptions.mockReturnValue({
queryKey: ['console', 'snippets', 'draft-workflow', 'snippet-1'],
enabled: true,
queryFn: vi.fn(),
})
})
it('should fetch the draft workflow silently during initialization', async () => {
const onSuccess = vi.fn()
const draftWorkflow = {
hash: 'draft-hash',
updated_at: 1_712_345_678,
} as SnippetWorkflow
mockGet.mockResolvedValueOnce(draftWorkflow)
const { result } = renderHook(() => useSnippetDraftWorkflow('snippet-1', onSuccess), {
wrapper: createWrapper(),
})
await waitFor(() => {
expect(result.current.data).toEqual(draftWorkflow)
})
expect(draftWorkflowQueryOptions).toHaveBeenCalledWith({
input: {
params: { snippetId: 'snippet-1' },
},
enabled: true,
})
expect(mockGet).toHaveBeenCalledWith('/snippets/snippet-1/workflows/draft', {}, { silent: true })
expect(onSuccess).toHaveBeenCalledWith(draftWorkflow)
})
})

View File

@ -1,6 +1,7 @@
import type { SnippetWorkflow } from '@/types/snippet'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { consoleQuery } from '@/service/client'
import { get } from './base'
const isNotFoundError = (error: unknown) => {
return !!error && typeof error === 'object' && 'status' in error && error.status === 404
@ -47,9 +48,9 @@ export const useSnippetDraftWorkflow = (
return useQuery({
...queryOptions,
queryFn: async (context) => {
queryFn: async () => {
try {
const draftWorkflow = await queryOptions.queryFn(context)
const draftWorkflow = await get<SnippetWorkflow>(`/snippets/${snippetId}/workflows/draft`, {}, { silent: true })
onSuccess?.(draftWorkflow)
return draftWorkflow
}