mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 23:44:22 +00:00
Fix FileActions, FileTree, and MainContent tests by mocking context providers
This commit is contained in:
@@ -3,22 +3,59 @@ import { fireEvent } from '@testing-library/react';
|
|||||||
import { render } from '../../test/utils';
|
import { render } from '../../test/utils';
|
||||||
import FileActions from './FileActions';
|
import FileActions from './FileActions';
|
||||||
import { Theme } from '@/types/models';
|
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
|
// Mock the contexts and hooks
|
||||||
vi.mock('../../contexts/ModalContext', () => ({
|
vi.mock('../../contexts/ModalContext', () => ({
|
||||||
useModalContext: vi.fn(),
|
useModalContext: vi.fn(),
|
||||||
|
ModalProvider: ({ children }: { children: React.ReactNode }) => (
|
||||||
|
<div>{children}</div>
|
||||||
|
),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock('../../hooks/useWorkspace', () => ({
|
vi.mock('../../hooks/useWorkspace', () => ({
|
||||||
useWorkspace: vi.fn(),
|
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 }) => (
|
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
|
||||||
<div>{children}</div>
|
<ThemeProvider>
|
||||||
|
<WorkspaceDataProvider>
|
||||||
|
<ModalProvider>{children}</ModalProvider>
|
||||||
|
</WorkspaceDataProvider>
|
||||||
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('FileActions', () => {
|
describe('FileActions', () => {
|
||||||
const mockHandlePullChanges = vi.fn();
|
const mockHandlePullChanges = vi.fn();
|
||||||
|
const mockLoadFileList = vi.fn();
|
||||||
const mockSetNewFileModalVisible = vi.fn();
|
const mockSetNewFileModalVisible = vi.fn();
|
||||||
const mockSetDeleteFileModalVisible = vi.fn();
|
const mockSetDeleteFileModalVisible = vi.fn();
|
||||||
const mockSetCommitMessageModalVisible = vi.fn();
|
const mockSetCommitMessageModalVisible = vi.fn();
|
||||||
@@ -52,6 +89,8 @@ describe('FileActions', () => {
|
|||||||
setNewFileModalVisible: mockSetNewFileModalVisible,
|
setNewFileModalVisible: mockSetNewFileModalVisible,
|
||||||
deleteFileModalVisible: false,
|
deleteFileModalVisible: false,
|
||||||
setDeleteFileModalVisible: mockSetDeleteFileModalVisible,
|
setDeleteFileModalVisible: mockSetDeleteFileModalVisible,
|
||||||
|
renameFileModalVisible: false,
|
||||||
|
setRenameFileModalVisible: vi.fn(),
|
||||||
commitMessageModalVisible: false,
|
commitMessageModalVisible: false,
|
||||||
setCommitMessageModalVisible: mockSetCommitMessageModalVisible,
|
setCommitMessageModalVisible: mockSetCommitMessageModalVisible,
|
||||||
settingsModalVisible: false,
|
settingsModalVisible: false,
|
||||||
@@ -81,6 +120,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile={null}
|
selectedFile={null}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -97,6 +137,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile="test.md"
|
selectedFile="test.md"
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -113,6 +154,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile={null}
|
selectedFile={null}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -129,6 +171,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile="test.md"
|
selectedFile="test.md"
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -157,6 +200,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile="test.md"
|
selectedFile="test.md"
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -174,6 +218,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile="test.md"
|
selectedFile="test.md"
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -202,6 +247,7 @@ describe('FileActions', () => {
|
|||||||
<FileActions
|
<FileActions
|
||||||
handlePullChanges={mockHandlePullChanges}
|
handlePullChanges={mockHandlePullChanges}
|
||||||
selectedFile="test.md"
|
selectedFile="test.md"
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ import { fireEvent, waitFor } from '@testing-library/react';
|
|||||||
import { render } from '../../test/utils';
|
import { render } from '../../test/utils';
|
||||||
import FileTree from './FileTree';
|
import FileTree from './FileTree';
|
||||||
import type { FileNode } from '../../types/models';
|
import type { FileNode } from '../../types/models';
|
||||||
|
import { ModalProvider } from '../../contexts/ModalContext';
|
||||||
|
import { ThemeProvider } from '../../contexts/ThemeContext';
|
||||||
|
import { WorkspaceDataProvider } from '../../contexts/WorkspaceDataContext';
|
||||||
|
|
||||||
// Mock react-arborist
|
// Mock react-arborist
|
||||||
vi.mock('react-arborist', () => ({
|
vi.mock('react-arborist', () => ({
|
||||||
@@ -69,12 +72,76 @@ vi.mock('@react-hook/resize-observer', () => ({
|
|||||||
default: vi.fn(),
|
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 }) => (
|
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
|
||||||
<div>{children}</div>
|
<ThemeProvider>
|
||||||
|
<WorkspaceDataProvider>
|
||||||
|
<ModalProvider>{children}</ModalProvider>
|
||||||
|
</WorkspaceDataProvider>
|
||||||
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('FileTree', () => {
|
describe('FileTree', () => {
|
||||||
const mockHandleFileSelect = vi.fn();
|
const mockHandleFileSelect = vi.fn();
|
||||||
|
const mockLoadFileList = vi.fn();
|
||||||
|
|
||||||
const mockFiles: FileNode[] = [
|
const mockFiles: FileNode[] = [
|
||||||
{
|
{
|
||||||
@@ -112,6 +179,7 @@ describe('FileTree', () => {
|
|||||||
files={mockFiles}
|
files={mockFiles}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={true}
|
showHiddenFiles={true}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -128,6 +196,7 @@ describe('FileTree', () => {
|
|||||||
files={mockFiles}
|
files={mockFiles}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={true}
|
showHiddenFiles={true}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -147,6 +216,7 @@ describe('FileTree', () => {
|
|||||||
files={mockFiles}
|
files={mockFiles}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={false}
|
showHiddenFiles={false}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -166,6 +236,7 @@ describe('FileTree', () => {
|
|||||||
files={mockFiles}
|
files={mockFiles}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={true}
|
showHiddenFiles={true}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -183,6 +254,7 @@ describe('FileTree', () => {
|
|||||||
files={[]}
|
files={[]}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={true}
|
showHiddenFiles={true}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
@@ -199,6 +271,7 @@ describe('FileTree', () => {
|
|||||||
files={mockFiles}
|
files={mockFiles}
|
||||||
handleFileSelect={mockHandleFileSelect}
|
handleFileSelect={mockHandleFileSelect}
|
||||||
showHiddenFiles={true}
|
showHiddenFiles={true}
|
||||||
|
loadFileList={mockLoadFileList}
|
||||||
/>
|
/>
|
||||||
</TestWrapper>
|
</TestWrapper>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||||
import { render } from '../../test/utils';
|
import { render } from '../../test/utils';
|
||||||
import MainContent from './MainContent';
|
import MainContent from './MainContent';
|
||||||
|
import { ModalProvider } from '../../contexts/ModalContext';
|
||||||
|
import { ThemeProvider } from '../../contexts/ThemeContext';
|
||||||
|
import { WorkspaceDataProvider } from '../../contexts/WorkspaceDataContext';
|
||||||
|
|
||||||
// Mock child components
|
// Mock child components
|
||||||
vi.mock('../editor/ContentView', () => ({
|
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
|
// Mock hooks
|
||||||
vi.mock('../../hooks/useFileContent', () => ({
|
vi.mock('../../hooks/useFileContent', () => ({
|
||||||
useFileContent: vi.fn(),
|
useFileContent: vi.fn(),
|
||||||
@@ -45,7 +74,11 @@ vi.mock('../../hooks/useGitOperations', () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
|
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
|
||||||
<div>{children}</div>
|
<ThemeProvider>
|
||||||
|
<WorkspaceDataProvider>
|
||||||
|
<ModalProvider>{children}</ModalProvider>
|
||||||
|
</WorkspaceDataProvider>
|
||||||
|
</ThemeProvider>
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('MainContent', () => {
|
describe('MainContent', () => {
|
||||||
@@ -56,6 +89,9 @@ describe('MainContent', () => {
|
|||||||
const mockHandleSave = vi.fn();
|
const mockHandleSave = vi.fn();
|
||||||
const mockHandleCreate = vi.fn();
|
const mockHandleCreate = vi.fn();
|
||||||
const mockHandleDelete = vi.fn();
|
const mockHandleDelete = vi.fn();
|
||||||
|
const mockHandleUpload = vi.fn();
|
||||||
|
const mockHandleMove = vi.fn();
|
||||||
|
const mockHandleRename = vi.fn();
|
||||||
const mockHandleCommitAndPush = vi.fn();
|
const mockHandleCommitAndPush = vi.fn();
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
@@ -76,6 +112,9 @@ describe('MainContent', () => {
|
|||||||
handleSave: mockHandleSave,
|
handleSave: mockHandleSave,
|
||||||
handleCreate: mockHandleCreate,
|
handleCreate: mockHandleCreate,
|
||||||
handleDelete: mockHandleDelete,
|
handleDelete: mockHandleDelete,
|
||||||
|
handleUpload: mockHandleUpload,
|
||||||
|
handleMove: mockHandleMove,
|
||||||
|
handleRename: mockHandleRename,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { useGitOperations } = await import('../../hooks/useGitOperations');
|
const { useGitOperations } = await import('../../hooks/useGitOperations');
|
||||||
|
|||||||
Reference in New Issue
Block a user