UNPKG

@eeacms/volto-chatbot

Version:

@eeacms/volto-chatbot: Volto add-on

93 lines (82 loc) 2.93 kB
import '@testing-library/jest-dom'; import { render, screen, fireEvent } from '@testing-library/react'; import HalloumiFeedback from './HalloumiFeedback'; jest.mock('./Spinner', () => () => <div data-testid="spinner">Loading...</div>); jest.mock('./utils', () => ({ SVGIcon: ({ name }) => <img src={name} alt="icon" />, })); jest.mock('./../icons/glasses.svg', () => 'glasses.svg'); jest.mock('@plone/volto-slate/editor/render', () => ({ serializeNodes: (nodes) => { const visitTextNodes = (node) => { if (Array.isArray(node)) return node.map(visitTextNodes).join(''); if (node && typeof node === 'object') { if (node.text) return node.text; if (node.children) return visitTextNodes(node.children); } return ''; }; return visitTextNodes(nodes); }, })); describe('HalloumiFeedback', () => { const defaultProps = { halloumiMessage: null, isLoadingHalloumi: false, markers: { claims: [{ score: 50, rationale: 'Some rationale' }] }, score: 75, scoreColor: 'green', onManualVerify: jest.fn(), showVerifyClaimsButton: false, sources: [], }; it('renders fact-check button when showVerifyClaimsButton is true', () => { render(<HalloumiFeedback {...defaultProps} showVerifyClaimsButton />); const button = screen.getByRole('button', { name: /Fact-check AI answer/i, }); expect(button).toBeInTheDocument(); fireEvent.click(button); expect(defaultProps.onManualVerify).toHaveBeenCalled(); expect(screen.getByText(/Please allow a few minutes/i)).toBeInTheDocument(); }); it('renders VerifyClaims message when loading and sources exist', () => { render( <HalloumiFeedback {...defaultProps} isLoadingHalloumi sources={['doc1']} showVerifyClaimsButton />, ); expect(screen.getByTestId('spinner')).toBeInTheDocument(); expect(screen.getByText(/Going through each claim/i)).toBeInTheDocument(); }); it('renders rationale message when no claims score', () => { render( <HalloumiFeedback {...defaultProps} markers={{ claims: [{ score: null, rationale: 'Failed to verify' }] }} />, ); expect(screen.getByText('Failed to verify')).toBeInTheDocument(); }); it('renders halloumiMessage with score replaced', () => { const halloumiMessage = [ { type: 'paragraph', children: [{ text: 'Score: {score}' }] }, ]; render( <HalloumiFeedback {...defaultProps} halloumiMessage={halloumiMessage} score={88} />, ); expect(screen.getByText('Score: 88%')).toBeInTheDocument(); }); it('does not render anything extra when no special props', () => { render(<HalloumiFeedback {...defaultProps} />); expect(screen.queryByRole('button')).not.toBeInTheDocument(); expect(screen.queryByTestId('spinner')).not.toBeInTheDocument(); }); });