import React from 'react'; import { render, fireEvent, within } from '@testing-library/react-native'; import { Text } from 'react-native'; import { ModalWidget } from '../components/ModalWidget'; describe('ModalWidget rendering', () => { it('should render Modal component when visible is true', () => { const { getByTestId, UNSAFE_getByType } = render( Survey Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal).toBeTruthy(); }); it('should render children inside the modal', () => { const { getByText } = render( Survey Content ); expect(getByText('Survey Content')).toBeTruthy(); }); it('should render the close button when visible is true', () => { const { getByText } = render( Content ); expect(getByText('✕')).toBeTruthy(); }); it('should call onClose when close button is pressed', () => { const mockOnClose = jest.fn(); const { getByText } = render( Content ); fireEvent.press(getByText('✕')); expect(mockOnClose).toHaveBeenCalledTimes(1); }); it('should set Modal visible to true via internal state on initial render', () => { const { UNSAFE_getByType } = render( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.visible).toBe(true); }); it('should use slide animation type', () => { const { UNSAFE_getByType } = render( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.animationType).toBe('slide'); }); it('should set Modal transparent prop to true', () => { const { UNSAFE_getByType } = render( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.transparent).toBe(true); }); it('should set hardwareAccelerated prop to true', () => { const { UNSAFE_getByType } = render( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.hardwareAccelerated).toBe(true); }); it('should pass visible=false to Modal when visible prop is false', () => { const { UNSAFE_getByType } = render( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.visible).toBe(false); }); it('should call onClose when close button is pressed inside modal', () => { const mockOnClose = jest.fn(); const { getByText } = render( Content ); fireEvent.press(getByText('✕')); expect(mockOnClose).toHaveBeenCalledTimes(1); }); it('should reflect updated visible prop after rerender', () => { const { UNSAFE_getByType, rerender } = render( Content ); rerender( Content ); const modal = UNSAFE_getByType(require('react-native').Modal); expect(modal.props.visible).toBe(false); }); it('should not call onClose if onClose prop is not provided', () => { const { getByText } = render( Content ); expect(() => fireEvent.press(getByText('✕'))).not.toThrow(); }); it('should render multiple children', () => { const { getByText } = render( First Child Second Child ); expect(getByText('First Child')).toBeTruthy(); expect(getByText('Second Child')).toBeTruthy(); }); });