IntentProbe.test.tsx
1 // Copyright (c) 2026 VPL Solutions. All rights reserved. 2 // Licensed under the MIT License. See LICENSE for details. 3 4 import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; 5 import { render, screen, fireEvent, cleanup } from '@testing-library/react'; 6 import { IntentProbe } from '../IntentProbe'; 7 8 describe('IntentProbe', () => { 9 const onComplete = vi.fn(); 10 const onSkip = vi.fn(); 11 12 beforeEach(() => { 13 onComplete.mockReset(); 14 onSkip.mockReset(); 15 }); 16 17 afterEach(() => cleanup()); 18 19 function renderProbe() { 20 return render(<IntentProbe onComplete={onComplete} onSkip={onSkip} />); 21 } 22 23 it('renders step 1 with intent options', () => { 24 renderProbe(); 25 expect(screen.getByText('How are you planning to use Meridian?')).toBeInTheDocument(); 26 expect(screen.getByText('Evaluate retrieval behavior')).toBeInTheDocument(); 27 expect(screen.getByText('Build a production system')).toBeInTheDocument(); 28 expect(screen.getByText('Test locally (on-prem / private)')).toBeInTheDocument(); 29 expect(screen.getByText('Explore capabilities')).toBeInTheDocument(); 30 }); 31 32 it('advances to step 2 after selecting intent', () => { 33 renderProbe(); 34 fireEvent.click(screen.getByText('Build a production system')); 35 expect(screen.getByText('Where will this run?')).toBeInTheDocument(); 36 expect(screen.getByText('Cloud')).toBeInTheDocument(); 37 expect(screen.getByText('Hybrid')).toBeInTheDocument(); 38 expect(screen.getByText('On-prem')).toBeInTheDocument(); 39 }); 40 41 it('completes after selecting topology and calls onComplete', () => { 42 renderProbe(); 43 fireEvent.click(screen.getByText('Evaluate retrieval behavior')); 44 fireEvent.click(screen.getByText('On-prem')); 45 expect(onComplete).toHaveBeenCalledWith('evaluate', 'on-prem'); 46 expect(screen.getByText('Selection saved')).toBeInTheDocument(); 47 expect(screen.getByText(/on-prem environments/i)).toBeInTheDocument(); 48 }); 49 50 it('calls onSkip when skip button is clicked on step 1', () => { 51 renderProbe(); 52 fireEvent.click(screen.getByLabelText('Skip setup')); 53 expect(onSkip).toHaveBeenCalledOnce(); 54 }); 55 56 it('calls onSkip when skip button is clicked on step 2', () => { 57 renderProbe(); 58 fireEvent.click(screen.getByText('Explore capabilities')); 59 fireEvent.click(screen.getByLabelText('Skip setup')); 60 expect(onSkip).toHaveBeenCalledOnce(); 61 }); 62 63 it('shows contextual response for cloud + build combination', () => { 64 renderProbe(); 65 fireEvent.click(screen.getByText('Build a production system')); 66 fireEvent.click(screen.getByText('Cloud')); 67 expect(onComplete).toHaveBeenCalledWith('build', 'cloud'); 68 expect(screen.getByText(/Azure managed services/i)).toBeInTheDocument(); 69 }); 70 });