/**
* Tests for PromptPreviewDialog component
* Testing tool information rendering for wikiOperationPlugin, wikiSearchPlugin, workspacesListPlugin
*/
import { act, render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import '@testing-library/jest-dom/vitest';
import { ThemeProvider } from '@mui/material/styles';
import { lightTheme } from '@services/theme/defaultTheme';
import { useAgentChatStore } from '@/pages/Agent/store/agentChatStore/index';
import defaultAgents from '@services/agentInstance/buildInAgentHandlers/defaultAgents.json';
import { PromptPreviewDialog } from '../index';
// Mock handler config management hook
vi.mock('@/windows/Preferences/sections/ExternalAPI/useHandlerConfigManagement', () => ({
useHandlerConfigManagement: vi.fn(() => ({
loading: false,
config: defaultAgents[0].handlerConfig,
handleConfigChange: vi.fn(),
})),
}));
// Test wrapper component
const TestWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => (
{children}
);
describe('PromptPreviewDialog - Tool Information Rendering', () => {
beforeEach(async () => {
// Reset store to initial state before each test using real store
// Set agent to null to avoid automatic preview generation during tests
act(() => {
useAgentChatStore.setState({
agent: null,
messages: new Map(),
previewDialogOpen: true,
previewDialogTab: 'tree',
previewLoading: false,
previewResult: null,
previewProgress: 0,
previewCurrentStep: '',
previewCurrentPlugin: null,
lastUpdated: null,
formFieldsToScrollTo: [],
expandedArrayItems: new Map(),
});
});
// Clear all mock calls
vi.clearAllMocks();
// Initialize real AgentInstance observables for testing actual plugin execution
});
it('should render dialog when open=true', async () => {
render(
,
);
// Check dialog title is visible
expect(screen.getByText(/Prompt.*Preview/)).toBeInTheDocument();
// Check that tabs are visible (labels come from translation keys)
expect(screen.getByRole('tab', { name: /Tree/ })).toBeInTheDocument();
expect(screen.getByRole('tab', { name: /Flat/ })).toBeInTheDocument();
});
// IMPROVED: Example of testing with state changes using real store
it('should handle loading states properly', async () => {
// Set initial loading state using real store (wrap in act)
act(() => {
useAgentChatStore.setState({
previewLoading: true,
previewProgress: 0.5,
previewCurrentStep: 'Starting...',
});
});
render(
,
);
// Should show loading indicator via visible text
expect(screen.getByText('Starting...')).toBeInTheDocument();
expect(screen.getByText('⚡ Live preview - this is not the final version and is still loading')).toBeInTheDocument();
expect(screen.getByText(/50%/)).toBeInTheDocument();
// Simulate loading completion using real store
act(() => {
useAgentChatStore.setState({
previewLoading: false,
previewProgress: 1,
});
});
// Verify the store updated
const currentState = useAgentChatStore.getState();
expect(currentState.previewLoading).toBe(false);
expect(currentState.previewProgress).toBe(1);
});
});