| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import { DataType } from '@/app/components/datasets/metadata/types'
- import { act, renderHook } from '@testing-library/react'
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
- import { useBatchUpdateDocMetadata } from '@/service/knowledge/use-metadata'
- import { useDocumentListKey } from './use-document'
-
- // Mock the post function to avoid real network requests
- jest.mock('@/service/base', () => ({
- post: jest.fn().mockResolvedValue({ success: true }),
- }))
-
- const NAME_SPACE = 'dataset-metadata'
-
- describe('useBatchUpdateDocMetadata', () => {
- let queryClient: QueryClient
-
- beforeEach(() => {
- // Create a fresh QueryClient before each test
- queryClient = new QueryClient()
- })
-
- // Wrapper for React Query context
- const wrapper = ({ children }: { children: React.ReactNode }) => (
- <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
- )
-
- it('should correctly invalidate dataset and document caches', async () => {
- const { result } = renderHook(() => useBatchUpdateDocMetadata(), { wrapper })
-
- // Spy on queryClient.invalidateQueries
- const invalidateSpy = jest.spyOn(queryClient, 'invalidateQueries')
-
- // Correct payload type: each document has its own metadata_list array
-
- const payload = {
- dataset_id: 'dataset-1',
- metadata_list: [
- {
- document_id: 'doc-1',
- metadata_list: [
- { key: 'title-1', id: '01', name: 'name-1', type: DataType.string, value: 'new title 01' },
- ],
- },
- {
- document_id: 'doc-2',
- metadata_list: [
- { key: 'title-2', id: '02', name: 'name-1', type: DataType.string, value: 'new title 02' },
- ],
- },
- ],
- }
-
- // Execute the mutation
- await act(async () => {
- await result.current.mutateAsync(payload)
- })
-
- // Expect invalidateQueries to have been called exactly 5 times
- expect(invalidateSpy).toHaveBeenCalledTimes(5)
-
- // Dataset cache invalidation
- expect(invalidateSpy).toHaveBeenNthCalledWith(1, {
- queryKey: [NAME_SPACE, 'dataset', 'dataset-1'],
- })
-
- // Document list cache invalidation
- expect(invalidateSpy).toHaveBeenNthCalledWith(2, {
- queryKey: [NAME_SPACE, 'document', 'dataset-1'],
- })
-
- // useDocumentListKey cache invalidation
- expect(invalidateSpy).toHaveBeenNthCalledWith(3, {
- queryKey: [...useDocumentListKey, 'dataset-1'],
- })
-
- // Single document cache invalidation
- expect(invalidateSpy.mock.calls.slice(3)).toEqual(
- expect.arrayContaining([
- [{ queryKey: [NAME_SPACE, 'document', 'dataset-1', 'doc-1'] }],
- [{ queryKey: [NAME_SPACE, 'document', 'dataset-1', 'doc-2'] }],
- ]),
- )
- })
- })
|