From d336b2f312b280cd7fe36727bd8b7c05c1a50ef6 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:42:45 +0530 Subject: [PATCH 01/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-6da58916a6d24610bcf84b12bea54549 --- frontend/src/components/ChatBox.tsx | 43 ++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/ChatBox.tsx b/frontend/src/components/ChatBox.tsx index aecde7b7b..c7a7584dd 100644 --- a/frontend/src/components/ChatBox.tsx +++ b/frontend/src/components/ChatBox.tsx @@ -86,6 +86,7 @@ interface SelectedFile { uploadError?: string preview?: string // URL for image preview fileType?: FileType + uploadAborted?: boolean } export const getFileIcon = (fileType: FileType | string | undefined) => { @@ -417,6 +418,7 @@ export const ChatBox = React.forwardRef( const scrollPositionRef = useRef(0) const navigate = useNavigate() const fileInputRef = useRef(null) + const uploadControllers = useRef>(new Map()) const [showReferenceBox, setShowReferenceBox] = useState(false) const [searchMode, setSearchMode] = useState<"citations" | "global">( @@ -836,12 +838,16 @@ export const ChatBox = React.forwardRef( setSelectedFiles((prev) => prev.map((f) => files.some((file) => file.id === f.id) - ? { ...f, uploading: true, uploadError: undefined } + ? { ...f, uploading: true, uploadError: undefined, uploadAborted: false } : f, ), ) const uploadPromises = files.map(async (selectedFile) => { + // Create AbortController for this file + const abortController = new AbortController() + uploadControllers.current.set(selectedFile.id, abortController) + try { const formData = new FormData() formData.append("attachment", selectedFile.file) @@ -850,6 +856,7 @@ export const ChatBox = React.forwardRef( { method: "POST", body: formData, + signal: abortController.signal, }, ) @@ -874,6 +881,19 @@ export const ChatBox = React.forwardRef( throw new Error("No document ID returned from upload") } } catch (error) { + // Check if the error is an AbortError + if (error instanceof Error && error.name === 'AbortError') { + // Handle aborted upload - don't show error toast + setSelectedFiles((prev) => + prev.map((f) => + f.id === selectedFile.id + ? { ...f, uploading: false, uploadAborted: true } + : f, + ), + ) + return null + } + const errorMessage = error instanceof Error ? error.message : "Upload failed" setSelectedFiles((prev) => @@ -889,6 +909,8 @@ export const ChatBox = React.forwardRef( }) return null } finally { + // Clean up the controller + uploadControllers.current.delete(selectedFile.id) setUploadingFilesCount((prev) => prev - 1) } }) @@ -980,6 +1002,25 @@ export const ChatBox = React.forwardRef( const removeFile = useCallback(async (id: string) => { const fileToRemove = selectedFiles.find((f) => f.id === id) + // If the file is currently uploading, abort the upload + if (fileToRemove?.uploading) { + const controller = uploadControllers.current.get(id) + if (controller) { + controller.abort() + uploadControllers.current.delete(id) + } + + // Remove from UI immediately for aborted uploads + setSelectedFiles((prev) => { + if (fileToRemove?.preview) { + URL.revokeObjectURL(fileToRemove.preview) + } + return prev.filter((f) => f.id !== id) + }) + setUploadingFilesCount((prev) => Math.max(0, prev - 1)) + return + } + // If the file has metadata with fileId (meaning it's already uploaded), delete it from the server if (fileToRemove?.metadata?.fileId) { try { From 6ba8debce07d1a328edaa2201099c51208da41d2 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:42:57 +0530 Subject: [PATCH 02/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-511206b58d0b4c58ac27d857f46d6fb9 --- server/api/files.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/api/files.ts b/server/api/files.ts index be0005ec2..13ca7a700 100644 --- a/server/api/files.ts +++ b/server/api/files.ts @@ -398,6 +398,14 @@ export const handleAttachmentUpload = async (c: Context) => { message: `Stored ${attachmentMetadata.length} attachment(s) successfully.`, }) } catch (error) { + // Handle AbortError gracefully for cancelled uploads + if (error instanceof Error && error.name === 'AbortError') { + loggerWithChild({ email }).info( + "Attachment upload was cancelled by client", + ) + throw new HTTPException(499, { message: "Upload cancelled" }) + } + loggerWithChild({ email }).error( error, "Error in attachment upload handler", From 50a8c64583c65a63169865d896998606a948858a Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:43:14 +0530 Subject: [PATCH 03/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-51e8385ecf4d4f5aad30e7e43e575b8e --- frontend/src/store/useUploadProgressStore.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/store/useUploadProgressStore.ts b/frontend/src/store/useUploadProgressStore.ts index 31f4d611b..8bbfa18f7 100644 --- a/frontend/src/store/useUploadProgressStore.ts +++ b/frontend/src/store/useUploadProgressStore.ts @@ -45,6 +45,7 @@ interface UploadProgressStore { ) => void finishUpload: (uploadId: string) => void cancelUpload: (uploadId: string) => void + removeProgress: (uploadId: string) => void getUploadProgress: (uploadId: string) => UploadTask | null } From ab79176a257dd3b16bc6fe0d3a25f48915adc331 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:43:17 +0530 Subject: [PATCH 04/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-0d22e0fd91d44038a30f765857735513 --- frontend/src/store/useUploadProgressStore.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/store/useUploadProgressStore.ts b/frontend/src/store/useUploadProgressStore.ts index 8bbfa18f7..f6a1c82e4 100644 --- a/frontend/src/store/useUploadProgressStore.ts +++ b/frontend/src/store/useUploadProgressStore.ts @@ -142,6 +142,12 @@ export const useUploadProgress = create((set, get) => ({ ) }, + removeProgress: (uploadId) => { + set((state) => + state.currentUpload?.id === uploadId ? { currentUpload: null } : state + ) + }, + getUploadProgress: (uploadId) => { const state = get() return state.currentUpload?.id === uploadId ? state.currentUpload : null From c3c5491f7dc07d799beb5ff75932313219bc44a2 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:43:22 +0530 Subject: [PATCH 05/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-e5ebc640d9ec4a59a72f5a541f1b1cc9 --- frontend/src/components/ChatBox.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/components/ChatBox.tsx b/frontend/src/components/ChatBox.tsx index c7a7584dd..abeaf4d61 100644 --- a/frontend/src/components/ChatBox.tsx +++ b/frontend/src/components/ChatBox.tsx @@ -2254,6 +2254,12 @@ export const ChatBox = React.forwardRef( .map((f) => f.preview) .filter(Boolean) as string[] cleanupPreviewUrls(previewUrls) + + // Abort any ongoing uploads + uploadControllers.current.forEach((controller) => { + controller.abort() + }) + uploadControllers.current.clear() } }, []) From 4570956fc13fc94e3dbfd5431485045d4700eef3 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:43:33 +0530 Subject: [PATCH 06/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-fac1457b8b3e448f834aa5e97b2491af --- frontend/src/components/ChatBox.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/ChatBox.tsx b/frontend/src/components/ChatBox.tsx index abeaf4d61..1e0c4c8b5 100644 --- a/frontend/src/components/ChatBox.tsx +++ b/frontend/src/components/ChatBox.tsx @@ -2908,8 +2908,12 @@ export const ChatBox = React.forwardRef( @@ -2964,8 +2968,12 @@ export const ChatBox = React.forwardRef( )} From f439f7925a6331c902634b3ad41e8dbd9487f853 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:43:35 +0530 Subject: [PATCH 07/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-9be0276806814fb59e4f781eb6aefcd7 --- frontend/src/components/ChatBox.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/ChatBox.tsx b/frontend/src/components/ChatBox.tsx index 1e0c4c8b5..85cb7c027 100644 --- a/frontend/src/components/ChatBox.tsx +++ b/frontend/src/components/ChatBox.tsx @@ -2986,7 +2986,7 @@ export const ChatBox = React.forwardRef( {uploadingFilesCount > 0 && (
- Uploading files... + Uploading files... (click X to cancel)
)} {selectedFiles.length >= MAX_ATTACHMENTS && ( From 1ab3fb49910a220912106f4aeb7f903a59102919 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:44:31 +0530 Subject: [PATCH 08/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-fef686835d28495e88bcd4f74ee921c8 --- .../src/components/__tests__/ChatBox.test.tsx | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 frontend/src/components/__tests__/ChatBox.test.tsx diff --git a/frontend/src/components/__tests__/ChatBox.test.tsx b/frontend/src/components/__tests__/ChatBox.test.tsx new file mode 100644 index 000000000..afbfe82f9 --- /dev/null +++ b/frontend/src/components/__tests__/ChatBox.test.tsx @@ -0,0 +1,106 @@ +import { renderHook, act } from '@testing-library/react' +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { ChatBox } from '../ChatBox' + +// Mock the necessary dependencies +vi.mock('@/utils/authFetch', () => ({ + authFetch: vi.fn() +})) + +vi.mock('@/hooks/use-toast', () => ({ + useToast: () => ({ + toast: { + error: vi.fn(), + success: vi.fn() + } + }) +})) + +vi.mock('@/api', () => ({ + api: { + files: { + delete: { + $post: vi.fn() + } + } + } +})) + +describe('ChatBox Upload Cancellation', () => { + let mockAuthFetch: any + + beforeEach(() => { + vi.clearAllMocks() + mockAuthFetch = vi.fn() + vi.doMock('@/utils/authFetch', () => ({ + authFetch: mockAuthFetch + })) + }) + + it('should handle upload cancellation correctly', async () => { + // Create a mock AbortController + const abortController = new AbortController() + + // Mock a file upload that can be aborted + const uploadPromise = new Promise((resolve, reject) => { + abortController.signal.addEventListener('abort', () => { + const error = new Error('Upload aborted') + error.name = 'AbortError' + reject(error) + }) + }) + + mockAuthFetch.mockReturnValue(uploadPromise) + + // Test that aborting the upload triggers the correct behavior + act(() => { + abortController.abort() + }) + + // Verify the upload was cancelled + await expect(uploadPromise).rejects.toThrow('Upload aborted') + }) + + it('should clean up upload controllers on component unmount', () => { + // This test would require more complex setup with actual component rendering + // For now, we'll just verify the concept + const controllers = new Map() + const controller1 = new AbortController() + const controller2 = new AbortController() + + controllers.set('file1', controller1) + controllers.set('file2', controller2) + + // Simulate cleanup + controllers.forEach((controller) => { + controller.abort() + }) + controllers.clear() + + expect(controllers.size).toBe(0) + expect(controller1.signal.aborted).toBe(true) + expect(controller2.signal.aborted).toBe(true) + }) + + it('should handle AbortError gracefully in upload completion', async () => { + const abortError = new Error('Request aborted') + abortError.name = 'AbortError' + + // Mock the upload function to handle AbortError + const mockUploadFile = async (file: File, signal: AbortSignal) => { + if (signal.aborted) { + throw abortError + } + return { fileId: 'test-id', fileName: file.name } + } + + const testFile = new File(['test'], 'test.txt', { type: 'text/plain' }) + const abortController = new AbortController() + + // Abort before upload + abortController.abort() + + // Verify AbortError is thrown + await expect(mockUploadFile(testFile, abortController.signal)).rejects.toThrow('Request aborted') + }) +}) \ No newline at end of file From e27258e97976789bca489bdce98abcdddc97a559 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:44:57 +0530 Subject: [PATCH 09/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-4535e59f01f34e89b6693fa2f3fe0402 --- .../__tests__/useUploadProgressStore.test.ts | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 frontend/src/store/__tests__/useUploadProgressStore.test.ts diff --git a/frontend/src/store/__tests__/useUploadProgressStore.test.ts b/frontend/src/store/__tests__/useUploadProgressStore.test.ts new file mode 100644 index 000000000..2503d77b3 --- /dev/null +++ b/frontend/src/store/__tests__/useUploadProgressStore.test.ts @@ -0,0 +1,87 @@ +import { describe, it, expect, beforeEach } from 'vitest' +import { useUploadProgress } from '../useUploadProgressStore' + +describe('useUploadProgressStore', () => { + beforeEach(() => { + // Reset the store before each test + const { getState } = useUploadProgress.getState() + if (getState().currentUpload) { + useUploadProgress.getState().finishUpload(getState().currentUpload!.id) + } + }) + + it('should start upload with abort controller', () => { + const { startUpload } = useUploadProgress.getState() + + const files = [ + { file: new File(['test'], 'test.txt'), id: 'file1' } + ] + + const result = startUpload('test-collection', files, 1, true) + + expect(result.uploadId).toBeDefined() + expect(result.abortController).toBeInstanceOf(AbortController) + expect(useUploadProgress.getState().currentUpload?.id).toBe(result.uploadId) + }) + + it('should cancel upload and abort controller', () => { + const { startUpload, cancelUpload } = useUploadProgress.getState() + + const files = [ + { file: new File(['test'], 'test.txt'), id: 'file1' } + ] + + const { uploadId, abortController } = startUpload('test-collection', files, 1, true) + + // Verify controller is not aborted initially + expect(abortController.signal.aborted).toBe(false) + + // Cancel the upload + cancelUpload(uploadId) + + // Verify controller is aborted and upload is removed + expect(abortController.signal.aborted).toBe(true) + expect(useUploadProgress.getState().currentUpload).toBeNull() + }) + + it('should remove progress', () => { + const { startUpload, removeProgress } = useUploadProgress.getState() + + const files = [ + { file: new File(['test'], 'test.txt'), id: 'file1' } + ] + + const { uploadId } = startUpload('test-collection', files, 1, true) + + // Verify upload exists + expect(useUploadProgress.getState().currentUpload?.id).toBe(uploadId) + + // Remove progress + removeProgress(uploadId) + + // Verify upload is removed + expect(useUploadProgress.getState().currentUpload).toBeNull() + }) + + it('should handle file status updates', () => { + const { startUpload, updateFileStatus } = useUploadProgress.getState() + + const files = [ + { file: new File(['test'], 'test.txt'), id: 'file1' } + ] + + const { uploadId } = startUpload('test-collection', files, 1, true) + + // Update file status to uploading + updateFileStatus(uploadId, 'test.txt', 'file1', 'uploading') + + let upload = useUploadProgress.getState().currentUpload + expect(upload?.files[0].status).toBe('uploading') + + // Update file status to uploaded + updateFileStatus(uploadId, 'test.txt', 'file1', 'uploaded') + + upload = useUploadProgress.getState().currentUpload + expect(upload?.files[0].status).toBe('uploaded') + }) +}) \ No newline at end of file From 7b5472e97803bd1d53b763f7fb12a5e7f4adbaa3 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:45:15 +0530 Subject: [PATCH 10/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-f088413a22c24a6bba7ce545bfd18c5f --- frontend/bun.lockb | Bin 475279 -> 475749 bytes frontend/package.json | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 7204e8d51b014e3d65a05025385b2de098fdf2d5..8f298443fe003dffce2f7dcb7c79f51e7e5907ac 100755 GIT binary patch delta 90051 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 diff --git a/frontend/package.json b/frontend/package.json index b67e5c96c..ba5e7ffe1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -64,7 +64,8 @@ "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7", "xlsx": "^0.18.5", - "zod": "3.23.8" + "zod": "3.23.8", + "zustand": "^5.0.8" }, "devDependencies": { "@eslint/js": "^9.17.0", From 0896bc411d3f0713ccf5e75bc2a01885890b33e7 Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:45:30 +0530 Subject: [PATCH 11/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-ce941fdfd00f4a04afae77a97bc11fa4 --- .../__tests__/useUploadProgressStore.test.ts | 106 ++++++++++-------- 1 file changed, 59 insertions(+), 47 deletions(-) diff --git a/frontend/src/store/__tests__/useUploadProgressStore.test.ts b/frontend/src/store/__tests__/useUploadProgressStore.test.ts index 2503d77b3..d419adec1 100644 --- a/frontend/src/store/__tests__/useUploadProgressStore.test.ts +++ b/frontend/src/store/__tests__/useUploadProgressStore.test.ts @@ -1,87 +1,99 @@ import { describe, it, expect, beforeEach } from 'vitest' +import { renderHook, act } from '@testing-library/react' import { useUploadProgress } from '../useUploadProgressStore' describe('useUploadProgressStore', () => { beforeEach(() => { // Reset the store before each test - const { getState } = useUploadProgress.getState() - if (getState().currentUpload) { - useUploadProgress.getState().finishUpload(getState().currentUpload!.id) - } + const { result } = renderHook(() => useUploadProgress()) + act(() => { + const currentUpload = result.current.currentUpload + if (currentUpload) { + result.current.finishUpload(currentUpload.id) + } + }) }) it('should start upload with abort controller', () => { - const { startUpload } = useUploadProgress.getState() + const { result } = renderHook(() => useUploadProgress()) const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - const result = startUpload('test-collection', files, 1, true) - - expect(result.uploadId).toBeDefined() - expect(result.abortController).toBeInstanceOf(AbortController) - expect(useUploadProgress.getState().currentUpload?.id).toBe(result.uploadId) + act(() => { + const uploadResult = result.current.startUpload('test-collection', files, 1, true) + + expect(uploadResult.uploadId).toBeDefined() + expect(uploadResult.abortController).toBeInstanceOf(AbortController) + expect(result.current.currentUpload?.id).toBe(uploadResult.uploadId) + }) }) it('should cancel upload and abort controller', () => { - const { startUpload, cancelUpload } = useUploadProgress.getState() + const { result } = renderHook(() => useUploadProgress()) const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - const { uploadId, abortController } = startUpload('test-collection', files, 1, true) - - // Verify controller is not aborted initially - expect(abortController.signal.aborted).toBe(false) - - // Cancel the upload - cancelUpload(uploadId) - - // Verify controller is aborted and upload is removed - expect(abortController.signal.aborted).toBe(true) - expect(useUploadProgress.getState().currentUpload).toBeNull() + act(() => { + const { uploadId, abortController } = result.current.startUpload('test-collection', files, 1, true) + + // Verify controller is not aborted initially + expect(abortController.signal.aborted).toBe(false) + + // Cancel the upload + result.current.cancelUpload(uploadId) + + // Verify controller is aborted and upload is removed + expect(abortController.signal.aborted).toBe(true) + expect(result.current.currentUpload).toBeNull() + }) }) it('should remove progress', () => { - const { startUpload, removeProgress } = useUploadProgress.getState() + const { result } = renderHook(() => useUploadProgress()) const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - const { uploadId } = startUpload('test-collection', files, 1, true) - - // Verify upload exists - expect(useUploadProgress.getState().currentUpload?.id).toBe(uploadId) - - // Remove progress - removeProgress(uploadId) - - // Verify upload is removed - expect(useUploadProgress.getState().currentUpload).toBeNull() + act(() => { + const { uploadId } = result.current.startUpload('test-collection', files, 1, true) + + // Verify upload exists + expect(result.current.currentUpload?.id).toBe(uploadId) + + // Remove progress + result.current.removeProgress(uploadId) + + // Verify upload is removed + expect(result.current.currentUpload).toBeNull() + }) }) it('should handle file status updates', () => { - const { startUpload, updateFileStatus } = useUploadProgress.getState() + const { result } = renderHook(() => useUploadProgress()) const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - const { uploadId } = startUpload('test-collection', files, 1, true) - - // Update file status to uploading - updateFileStatus(uploadId, 'test.txt', 'file1', 'uploading') - - let upload = useUploadProgress.getState().currentUpload - expect(upload?.files[0].status).toBe('uploading') - - // Update file status to uploaded - updateFileStatus(uploadId, 'test.txt', 'file1', 'uploaded') - - upload = useUploadProgress.getState().currentUpload - expect(upload?.files[0].status).toBe('uploaded') + act(() => { + const { uploadId } = result.current.startUpload('test-collection', files, 1, true) + + // Update file status to uploading + result.current.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploading') + + let upload = result.current.currentUpload + expect(upload?.files[0].status).toBe('uploading') + + // Update file status to uploaded + result.current.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploaded') + + upload = result.current.currentUpload + expect(upload?.files[0].status).toBe('uploaded') + }) }) }) \ No newline at end of file From 077709851149ccb30e2cdc5cee6dddd7143d46db Mon Sep 17 00:00:00 2001 From: Ravishekhar Yadav Date: Mon, 13 Oct 2025 15:45:48 +0530 Subject: [PATCH 12/12] EUL-0000 Auto-commit changes from tool execution chatcmpl-tool-9356450bc6a84feb9b088d2c6118b0bf --- .../__tests__/useUploadProgressStore.test.ts | 141 ++++++++++-------- 1 file changed, 80 insertions(+), 61 deletions(-) diff --git a/frontend/src/store/__tests__/useUploadProgressStore.test.ts b/frontend/src/store/__tests__/useUploadProgressStore.test.ts index d419adec1..74a40766e 100644 --- a/frontend/src/store/__tests__/useUploadProgressStore.test.ts +++ b/frontend/src/store/__tests__/useUploadProgressStore.test.ts @@ -1,99 +1,118 @@ -import { describe, it, expect, beforeEach } from 'vitest' -import { renderHook, act } from '@testing-library/react' +import { describe, it, expect, beforeEach, vi } from 'vitest' import { useUploadProgress } from '../useUploadProgressStore' +// Mock File API for testing +global.File = class MockFile { + name: string + size: number + type: string + lastModified: number + + constructor(bits: any[], name: string, options?: { type?: string }) { + this.name = name + this.type = options?.type || 'text/plain' + this.size = bits.reduce((acc, bit) => acc + (typeof bit === 'string' ? bit.length : 0), 0) + this.lastModified = Date.now() + } +} as any + describe('useUploadProgressStore', () => { beforeEach(() => { - // Reset the store before each test - const { result } = renderHook(() => useUploadProgress()) - act(() => { - const currentUpload = result.current.currentUpload - if (currentUpload) { - result.current.finishUpload(currentUpload.id) - } - }) + // Reset the store before each test by getting the state and clearing it + const store = useUploadProgress.getState() + if (store.currentUpload) { + store.finishUpload(store.currentUpload.id) + } }) it('should start upload with abort controller', () => { - const { result } = renderHook(() => useUploadProgress()) + const store = useUploadProgress.getState() const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - act(() => { - const uploadResult = result.current.startUpload('test-collection', files, 1, true) - - expect(uploadResult.uploadId).toBeDefined() - expect(uploadResult.abortController).toBeInstanceOf(AbortController) - expect(result.current.currentUpload?.id).toBe(uploadResult.uploadId) - }) + const result = store.startUpload('test-collection', files, 1, true) + + expect(result.uploadId).toBeDefined() + expect(result.abortController).toBeInstanceOf(AbortController) + expect(useUploadProgress.getState().currentUpload?.id).toBe(result.uploadId) }) it('should cancel upload and abort controller', () => { - const { result } = renderHook(() => useUploadProgress()) + const store = useUploadProgress.getState() const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - act(() => { - const { uploadId, abortController } = result.current.startUpload('test-collection', files, 1, true) - - // Verify controller is not aborted initially - expect(abortController.signal.aborted).toBe(false) - - // Cancel the upload - result.current.cancelUpload(uploadId) - - // Verify controller is aborted and upload is removed - expect(abortController.signal.aborted).toBe(true) - expect(result.current.currentUpload).toBeNull() - }) + const { uploadId, abortController } = store.startUpload('test-collection', files, 1, true) + + // Verify controller is not aborted initially + expect(abortController.signal.aborted).toBe(false) + + // Cancel the upload + store.cancelUpload(uploadId) + + // Verify controller is aborted and upload is removed + expect(abortController.signal.aborted).toBe(true) + expect(useUploadProgress.getState().currentUpload).toBeNull() }) it('should remove progress', () => { - const { result } = renderHook(() => useUploadProgress()) + const store = useUploadProgress.getState() const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - act(() => { - const { uploadId } = result.current.startUpload('test-collection', files, 1, true) - - // Verify upload exists - expect(result.current.currentUpload?.id).toBe(uploadId) - - // Remove progress - result.current.removeProgress(uploadId) - - // Verify upload is removed - expect(result.current.currentUpload).toBeNull() - }) + const { uploadId } = store.startUpload('test-collection', files, 1, true) + + // Verify upload exists + expect(useUploadProgress.getState().currentUpload?.id).toBe(uploadId) + + // Remove progress + store.removeProgress(uploadId) + + // Verify upload is removed + expect(useUploadProgress.getState().currentUpload).toBeNull() }) it('should handle file status updates', () => { - const { result } = renderHook(() => useUploadProgress()) + const store = useUploadProgress.getState() + + const files = [ + { file: new File(['test'], 'test.txt'), id: 'file1' } + ] + + const { uploadId } = store.startUpload('test-collection', files, 1, true) + + // Update file status to uploading + store.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploading') + + let upload = useUploadProgress.getState().currentUpload + expect(upload?.files[0].status).toBe('uploading') + + // Update file status to uploaded + store.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploaded') + + upload = useUploadProgress.getState().currentUpload + expect(upload?.files[0].status).toBe('uploaded') + }) + + it('should handle abort controller cleanup', () => { + const store = useUploadProgress.getState() const files = [ { file: new File(['test'], 'test.txt'), id: 'file1' } ] - act(() => { - const { uploadId } = result.current.startUpload('test-collection', files, 1, true) - - // Update file status to uploading - result.current.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploading') - - let upload = result.current.currentUpload - expect(upload?.files[0].status).toBe('uploading') - - // Update file status to uploaded - result.current.updateFileStatus(uploadId, 'test.txt', 'file1', 'uploaded') - - upload = result.current.currentUpload - expect(upload?.files[0].status).toBe('uploaded') - }) + const { abortController } = store.startUpload('test-collection', files, 1, true) + + // Manually abort the controller + abortController.abort() + + // Verify the signal is aborted + expect(abortController.signal.aborted).toBe(true) }) }) \ No newline at end of file