Fix FileActions, FileTree, and MainContent tests by mocking context providers

This commit is contained in:
2025-07-11 23:35:00 +02:00
parent 9bb95f603c
commit e1760ccd82
3 changed files with 161 additions and 3 deletions

View File

@@ -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 }) => (
<div>{children}</div>
),
}));
vi.mock('../../hooks/useWorkspace', () => ({
useWorkspace: vi.fn(),
}));
// Mock contexts
vi.mock('../../contexts/ThemeContext', () => ({
useTheme: () => ({
colorScheme: 'light',
updateColorScheme: vi.fn(),
}),
ThemeProvider: ({ children }: { children: React.ReactNode }) => (
<div>{children}</div>
),
}));
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 }) => (
<div>{children}</div>
),
}));
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
<div>{children}</div>
<ThemeProvider>
<WorkspaceDataProvider>
<ModalProvider>{children}</ModalProvider>
</WorkspaceDataProvider>
</ThemeProvider>
);
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', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile={null}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -97,6 +137,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile="test.md"
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -113,6 +154,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile={null}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -129,6 +171,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile="test.md"
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -157,6 +200,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile="test.md"
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -174,6 +218,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile="test.md"
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -202,6 +247,7 @@ describe('FileActions', () => {
<FileActions
handlePullChanges={mockHandlePullChanges}
selectedFile="test.md"
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);

View File

@@ -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 }) => (
<div>{children}</div>
),
}));
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 }) => (
<div>{children}</div>
),
}));
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 }) => (
<div>{children}</div>
),
}));
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 }) => (
<div>{children}</div>
<ThemeProvider>
<WorkspaceDataProvider>
<ModalProvider>{children}</ModalProvider>
</WorkspaceDataProvider>
</ThemeProvider>
);
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}
/>
</TestWrapper>
);
@@ -128,6 +196,7 @@ describe('FileTree', () => {
files={mockFiles}
handleFileSelect={mockHandleFileSelect}
showHiddenFiles={true}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -147,6 +216,7 @@ describe('FileTree', () => {
files={mockFiles}
handleFileSelect={mockHandleFileSelect}
showHiddenFiles={false}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -166,6 +236,7 @@ describe('FileTree', () => {
files={mockFiles}
handleFileSelect={mockHandleFileSelect}
showHiddenFiles={true}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -183,6 +254,7 @@ describe('FileTree', () => {
files={[]}
handleFileSelect={mockHandleFileSelect}
showHiddenFiles={true}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);
@@ -199,6 +271,7 @@ describe('FileTree', () => {
files={mockFiles}
handleFileSelect={mockHandleFileSelect}
showHiddenFiles={true}
loadFileList={mockLoadFileList}
/>
</TestWrapper>
);

View File

@@ -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 }) => (
<div>{children}</div>
),
}));
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 }) => (
<div>{children}</div>
),
}));
// Mock hooks
vi.mock('../../hooks/useFileContent', () => ({
useFileContent: vi.fn(),
@@ -45,7 +74,11 @@ vi.mock('../../hooks/useGitOperations', () => ({
}));
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
<div>{children}</div>
<ThemeProvider>
<WorkspaceDataProvider>
<ModalProvider>{children}</ModalProvider>
</WorkspaceDataProvider>
</ThemeProvider>
);
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');