diff --git a/web/service/__tests__/use-snippet-workflows.spec.tsx b/web/service/__tests__/use-snippet-workflows.spec.tsx
new file mode 100644
index 0000000000..d39f27390b
--- /dev/null
+++ b/web/service/__tests__/use-snippet-workflows.spec.tsx
@@ -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 }) => (
+ {children}
+ )
+}
+
+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)
+ })
+})
diff --git a/web/service/use-snippet-workflows.ts b/web/service/use-snippet-workflows.ts
index 4141097bed..8130e73752 100644
--- a/web/service/use-snippet-workflows.ts
+++ b/web/service/use-snippet-workflows.ts
@@ -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(`/snippets/${snippetId}/workflows/draft`, {}, { silent: true })
onSuccess?.(draftWorkflow)
return draftWorkflow
}