import React from 'react'; import { fireEvent, render, renderHook } from '@testing-library/react-native'; import { useTheme } from '../../../theme'; import IconButton from '../IconButton'; import { getThemedStyles } from '../styles'; const source = { uri: 'icon.png' }; describe('IconButton', () => { it('renders as expected', () => { const { toJSON, getByRole } = render(); expect(getByRole('button')).toBeDefined(); expect(getByRole('image')).toBeDefined(); expect(toJSON()).toMatchSnapshot(); }); it('handles disabled state', () => { const onPressMock = jest.fn(); const { toJSON, getByRole } = render( ); const button = getByRole('button'); fireEvent.press(button); expect(onPressMock).not.toHaveBeenCalled(); const { result } = renderHook(() => useTheme()); const themedStyle = getThemedStyles(result.current); expect(button.props.style).toStrictEqual([ { ...themedStyle.container, ...themedStyle.disabled }, undefined, undefined, ]); expect(toJSON()).toMatchSnapshot(); }); it('renders as expected with custom icon style', () => { const customIconStyle = { backgroundColor: 'antiquewhite' }; const { toJSON, getByRole } = render( ); const icon = getByRole('image'); expect(icon.props.style).toContain(customIconStyle); expect(toJSON()).toMatchSnapshot(); }); it('applies theme and style props', () => { const customStyle = { backgroundColor: 'blue' }; const { toJSON, getByRole } = render( ); const { result } = renderHook(() => useTheme()); const themedStyle = getThemedStyles(result.current); expect(getByRole('button').props.style).toStrictEqual([ { ...themedStyle.container, }, undefined, customStyle, ]); expect(toJSON()).toMatchSnapshot(); }); });