dify/web/app/components/plugins/plugin-detail-panel/subscription-list/use-subscription-list.spec.ts

68 lines
2.0 KiB
TypeScript

import type { SimpleDetail } from '../store'
import { renderHook } from '@testing-library/react'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { useSubscriptionList } from './use-subscription-list'
let mockDetail: SimpleDetail | undefined
const mockRefetch = vi.fn()
const mockTriggerSubscriptions = vi.fn()
vi.mock('@/service/use-triggers', () => ({
useTriggerSubscriptions: (...args: unknown[]) => mockTriggerSubscriptions(...args),
}))
vi.mock('../store', () => ({
usePluginStore: (selector: (state: { detail: SimpleDetail | undefined }) => SimpleDetail | undefined) =>
selector({ detail: mockDetail }),
}))
beforeEach(() => {
vi.clearAllMocks()
mockDetail = undefined
mockTriggerSubscriptions.mockReturnValue({
data: [],
isLoading: false,
refetch: mockRefetch,
})
})
describe('useSubscriptionList', () => {
it('should request subscriptions with provider from store', () => {
mockDetail = {
id: 'detail-1',
plugin_id: 'plugin-1',
name: 'Plugin',
plugin_unique_identifier: 'plugin-uid',
provider: 'test-provider',
declaration: {},
}
const { result } = renderHook(() => useSubscriptionList())
expect(mockTriggerSubscriptions).toHaveBeenCalledWith('test-provider')
expect(result.current.detail).toEqual(mockDetail)
})
it('should request subscriptions with empty provider when detail is missing', () => {
const { result } = renderHook(() => useSubscriptionList())
expect(mockTriggerSubscriptions).toHaveBeenCalledWith('')
expect(result.current.detail).toBeUndefined()
})
it('should return data from trigger subscription hook', () => {
mockTriggerSubscriptions.mockReturnValue({
data: [{ id: 'sub-1' }],
isLoading: true,
refetch: mockRefetch,
})
const { result } = renderHook(() => useSubscriptionList())
expect(result.current.subscriptions).toEqual([{ id: 'sub-1' }])
expect(result.current.isLoading).toBe(true)
expect(result.current.refetch).toBe(mockRefetch)
})
})