import React from 'react'; import { Text } from 'react-native'; import { render } from '@testing-library/react-native'; import { ChatContextValue, ChatProvider } from '../../../contexts/chatContext/ChatContext'; import { ThemeProvider } from '../../../contexts/themeContext/ThemeContext'; import { defaultTheme } from '../../../contexts/themeContext/utils/theme'; import { getTestClientWithUser } from '../../../mock-builders/mock'; import { MessageUserReactionsItem } from '../MessageUserReactionsItem'; jest.mock('../../../icons', () => ({ Unknown: () => { const { Text } = require('react-native'); return unknown; }, })); const mockReaction = { id: 'user1', name: 'John Doe', type: 'like', }; const mockSupportedReactions = [ { Icon: () => like, type: 'like' }, { Icon: () => love, type: 'love' }, ]; const MockOverlayReactionsAvatar = () => null; const renderComponent = async (props = {}, clientUserID = 'user2') => render( , ); describe('MessageUserReactionsItem', () => { it('renders correctly', async () => { const { getByLabelText, getByText } = await renderComponent(); expect(getByLabelText('Individual User Reaction on long press message')).toBeTruthy(); expect(getByText('John Doe')).toBeTruthy(); }); it("doesn't show remove hint for other users", async () => { const { queryByText } = await renderComponent(); expect(queryByText('Tap to remove')).toBeNull(); }); it('shows remove hint for current user', async () => { const { getByText } = await renderComponent({}, 'user1'); expect(getByText('Tap to remove')).toBeTruthy(); }); it('uses Unknown icon for unsupported reaction types', async () => { const { getByTestId, queryByTestId } = await renderComponent({ reaction: { ...mockReaction, type: 'unsupported' }, }); expect(getByTestId('unknown-icon')).toBeTruthy(); expect(queryByTestId('like-icon')).toBeNull(); }); it('uses correct icon for supported reaction types', async () => { const { getByTestId, queryByTestId } = await renderComponent(); expect(getByTestId('like-icon')).toBeTruthy(); expect(queryByTestId('unknown-icon')).toBeNull(); }); });