import { fireEvent, render, screen } from '@testing-library/react-native'; import React from 'react'; import { ChatInput } from '../components/chat/ChatInput'; describe('ChatInput', () => { it('sends trimmed text, clears the field and disables send while empty', () => { const onSend = jest.fn(); render(); expect(screen.getByLabelText('Send message').props.accessibilityState.disabled).toBe(true); fireEvent.changeText(screen.getByLabelText('Message'), ' hello '); fireEvent.press(screen.getByLabelText('Send message')); expect(onSend).toHaveBeenCalledWith('hello'); expect(screen.getByLabelText('Message').props.value).toBe(''); }); it('shows a stop button instead of send while loading', () => { const onStop = jest.fn(); render(); expect(screen.queryByLabelText('Send message')).toBeNull(); fireEvent.press(screen.getByLabelText('Stop generating')); expect(onStop).toHaveBeenCalledTimes(1); }); it('fills the field when editing and lets the user cancel', () => { const onCancelEdit = jest.fn(); render(); expect(screen.getByText('Editing message')).toBeTruthy(); expect(screen.getByLabelText('Message').props.value).toBe('old text'); fireEvent.press(screen.getByLabelText('Cancel editing')); expect(onCancelEdit).toHaveBeenCalledTimes(1); expect(screen.getByLabelText('Message').props.value).toBe(''); }); });