diff --git a/app/src/components/files/FileActions.test.tsx b/app/src/components/files/FileActions.test.tsx index 501a0d8..ca844e2 100644 --- a/app/src/components/files/FileActions.test.tsx +++ b/app/src/components/files/FileActions.test.tsx @@ -3,22 +3,59 @@ import { fireEvent } from '@testing-library/react'; import { render } from '../../test/utils'; import FileActions from './FileActions'; import { Theme } from '@/types/models'; +import { ModalProvider } from '../../contexts/ModalContext'; +import { ThemeProvider } from '../../contexts/ThemeContext'; +import { WorkspaceDataProvider } from '../../contexts/WorkspaceDataContext'; // Mock the contexts and hooks vi.mock('../../contexts/ModalContext', () => ({ useModalContext: vi.fn(), + ModalProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), })); vi.mock('../../hooks/useWorkspace', () => ({ useWorkspace: vi.fn(), })); +// Mock contexts +vi.mock('../../contexts/ThemeContext', () => ({ + useTheme: () => ({ + colorScheme: 'light', + updateColorScheme: vi.fn(), + }), + ThemeProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + +vi.mock('../../contexts/WorkspaceDataContext', () => ({ + useWorkspaceData: () => ({ + currentWorkspace: { name: 'test-workspace', path: '/test' }, + workspaces: [], + settings: {}, + loading: false, + loadWorkspaces: vi.fn(), + loadWorkspaceData: vi.fn(), + setCurrentWorkspace: vi.fn(), + }), + WorkspaceDataProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + const TestWrapper = ({ children }: { children: React.ReactNode }) => ( -
{children}
+ + + {children} + + ); describe('FileActions', () => { const mockHandlePullChanges = vi.fn(); + const mockLoadFileList = vi.fn(); const mockSetNewFileModalVisible = vi.fn(); const mockSetDeleteFileModalVisible = vi.fn(); const mockSetCommitMessageModalVisible = vi.fn(); @@ -52,6 +89,8 @@ describe('FileActions', () => { setNewFileModalVisible: mockSetNewFileModalVisible, deleteFileModalVisible: false, setDeleteFileModalVisible: mockSetDeleteFileModalVisible, + renameFileModalVisible: false, + setRenameFileModalVisible: vi.fn(), commitMessageModalVisible: false, setCommitMessageModalVisible: mockSetCommitMessageModalVisible, settingsModalVisible: false, @@ -81,6 +120,7 @@ describe('FileActions', () => { ); @@ -97,6 +137,7 @@ describe('FileActions', () => { ); @@ -113,6 +154,7 @@ describe('FileActions', () => { ); @@ -129,6 +171,7 @@ describe('FileActions', () => { ); @@ -157,6 +200,7 @@ describe('FileActions', () => { ); @@ -174,6 +218,7 @@ describe('FileActions', () => { ); @@ -202,6 +247,7 @@ describe('FileActions', () => { ); diff --git a/app/src/components/files/FileTree.test.tsx b/app/src/components/files/FileTree.test.tsx index 09ec508..5a17311 100644 --- a/app/src/components/files/FileTree.test.tsx +++ b/app/src/components/files/FileTree.test.tsx @@ -3,6 +3,9 @@ import { fireEvent, waitFor } from '@testing-library/react'; import { render } from '../../test/utils'; import FileTree from './FileTree'; import type { FileNode } from '../../types/models'; +import { ModalProvider } from '../../contexts/ModalContext'; +import { ThemeProvider } from '../../contexts/ThemeContext'; +import { WorkspaceDataProvider } from '../../contexts/WorkspaceDataContext'; // Mock react-arborist vi.mock('react-arborist', () => ({ @@ -69,12 +72,76 @@ vi.mock('@react-hook/resize-observer', () => ({ default: vi.fn(), })); +// Mock contexts +vi.mock('../../contexts/ThemeContext', () => ({ + useTheme: () => ({ + colorScheme: 'light', + updateColorScheme: vi.fn(), + }), + ThemeProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + +vi.mock('../../contexts/WorkspaceDataContext', () => ({ + useWorkspaceData: () => ({ + currentWorkspace: { name: 'test-workspace', path: '/test' }, + workspaces: [], + settings: {}, + loading: false, + loadWorkspaces: vi.fn(), + loadWorkspaceData: vi.fn(), + setCurrentWorkspace: vi.fn(), + }), + WorkspaceDataProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + +vi.mock('../../contexts/ModalContext', () => ({ + useModalContext: () => ({ + newFileModalVisible: false, + setNewFileModalVisible: vi.fn(), + deleteFileModalVisible: false, + setDeleteFileModalVisible: vi.fn(), + renameFileModalVisible: false, + setRenameFileModalVisible: vi.fn(), + commitMessageModalVisible: false, + setCommitMessageModalVisible: vi.fn(), + settingsModalVisible: false, + setSettingsModalVisible: vi.fn(), + switchWorkspaceModalVisible: false, + setSwitchWorkspaceModalVisible: vi.fn(), + createWorkspaceModalVisible: false, + setCreateWorkspaceModalVisible: vi.fn(), + }), + ModalProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + +vi.mock('../../hooks/useFileOperations', () => ({ + useFileOperations: () => ({ + handleSave: vi.fn(), + handleCreate: vi.fn(), + handleDelete: vi.fn(), + handleUpload: vi.fn(), + handleMove: vi.fn(), + handleRename: vi.fn(), + }), +})); + const TestWrapper = ({ children }: { children: React.ReactNode }) => ( -
{children}
+ + + {children} + + ); describe('FileTree', () => { const mockHandleFileSelect = vi.fn(); + const mockLoadFileList = vi.fn(); const mockFiles: FileNode[] = [ { @@ -112,6 +179,7 @@ describe('FileTree', () => { files={mockFiles} handleFileSelect={mockHandleFileSelect} showHiddenFiles={true} + loadFileList={mockLoadFileList} /> ); @@ -128,6 +196,7 @@ describe('FileTree', () => { files={mockFiles} handleFileSelect={mockHandleFileSelect} showHiddenFiles={true} + loadFileList={mockLoadFileList} /> ); @@ -147,6 +216,7 @@ describe('FileTree', () => { files={mockFiles} handleFileSelect={mockHandleFileSelect} showHiddenFiles={false} + loadFileList={mockLoadFileList} /> ); @@ -166,6 +236,7 @@ describe('FileTree', () => { files={mockFiles} handleFileSelect={mockHandleFileSelect} showHiddenFiles={true} + loadFileList={mockLoadFileList} /> ); @@ -183,6 +254,7 @@ describe('FileTree', () => { files={[]} handleFileSelect={mockHandleFileSelect} showHiddenFiles={true} + loadFileList={mockLoadFileList} /> ); @@ -199,6 +271,7 @@ describe('FileTree', () => { files={mockFiles} handleFileSelect={mockHandleFileSelect} showHiddenFiles={true} + loadFileList={mockLoadFileList} /> ); diff --git a/app/src/components/layout/MainContent.test.tsx b/app/src/components/layout/MainContent.test.tsx index 2972091..769206d 100644 --- a/app/src/components/layout/MainContent.test.tsx +++ b/app/src/components/layout/MainContent.test.tsx @@ -1,6 +1,9 @@ import { describe, it, expect, vi, beforeEach } from 'vitest'; import { render } from '../../test/utils'; import MainContent from './MainContent'; +import { ModalProvider } from '../../contexts/ModalContext'; +import { ThemeProvider } from '../../contexts/ThemeContext'; +import { WorkspaceDataProvider } from '../../contexts/WorkspaceDataContext'; // Mock child components vi.mock('../editor/ContentView', () => ({ @@ -31,6 +34,32 @@ vi.mock('../modals/git/CommitMessageModal', () => ({ ), })); +// Mock contexts +vi.mock('../../contexts/ThemeContext', () => ({ + useTheme: () => ({ + colorScheme: 'light', + updateColorScheme: vi.fn(), + }), + ThemeProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + +vi.mock('../../contexts/WorkspaceDataContext', () => ({ + useWorkspaceData: () => ({ + currentWorkspace: { name: 'test-workspace', path: '/test' }, + workspaces: [], + settings: {}, + loading: false, + loadWorkspaces: vi.fn(), + loadWorkspaceData: vi.fn(), + setCurrentWorkspace: vi.fn(), + }), + WorkspaceDataProvider: ({ children }: { children: React.ReactNode }) => ( +
{children}
+ ), +})); + // Mock hooks vi.mock('../../hooks/useFileContent', () => ({ useFileContent: vi.fn(), @@ -45,7 +74,11 @@ vi.mock('../../hooks/useGitOperations', () => ({ })); const TestWrapper = ({ children }: { children: React.ReactNode }) => ( -
{children}
+ + + {children} + + ); describe('MainContent', () => { @@ -56,6 +89,9 @@ describe('MainContent', () => { const mockHandleSave = vi.fn(); const mockHandleCreate = vi.fn(); const mockHandleDelete = vi.fn(); + const mockHandleUpload = vi.fn(); + const mockHandleMove = vi.fn(); + const mockHandleRename = vi.fn(); const mockHandleCommitAndPush = vi.fn(); beforeEach(async () => { @@ -76,6 +112,9 @@ describe('MainContent', () => { handleSave: mockHandleSave, handleCreate: mockHandleCreate, handleDelete: mockHandleDelete, + handleUpload: mockHandleUpload, + handleMove: mockHandleMove, + handleRename: mockHandleRename, }); const { useGitOperations } = await import('../../hooks/useGitOperations');