/ src / components / ui / __tests__ / IntentProbe.test.tsx
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  });