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');