import React from 'react';
import { Text } from 'react-native';
import { render } from '@testing-library/react-native';
import type { Channel } from 'stream-chat';
import { ThemeProvider, defaultTheme } from '../../../contexts';
import { WithComponents } from '../../../contexts/componentsContext/ComponentsContext';
import type { ChannelActionItem } from '../../ChannelList/hooks/useChannelActionItems';
import type { ChannelDetailsHeaderProps } from '../ChannelDetailsBottomSheet';
import { ChannelDetailsBottomSheet } from '../ChannelDetailsBottomSheet';
const mockStreamBottomSheetModalFlatList = jest.fn(() => null);
jest.mock('../../UIComponents/StreamBottomSheetModalFlatList', () => ({
StreamBottomSheetModalFlatList: (...args: unknown[]) =>
mockStreamBottomSheetModalFlatList(...args),
}));
describe('ChannelDetailsBottomSheet', () => {
const channel = {
cid: 'messaging:test-channel',
id: 'test-channel',
state: { members: {} },
} as unknown as Channel;
const items: ChannelActionItem[] = [
{
Icon: () => null,
action: jest.fn(),
id: 'mute',
label: 'Mute',
placement: 'both',
type: 'standard',
},
];
beforeEach(() => {
jest.clearAllMocks();
});
it('renders custom ChannelDetailsHeader override', () => {
const CustomChannelDetailsHeader = ({ channel: headerChannel }: ChannelDetailsHeaderProps) => (
{headerChannel.cid}
);
const { getByTestId } = render(
,
);
expect(getByTestId('custom-channel-details-header')).toHaveTextContent(
'messaging:test-channel',
);
});
it('forwards additionalFlatListProps to StreamBottomSheetModalFlatList', () => {
const onEndReached = jest.fn();
render(
null }}>
,
);
expect(mockStreamBottomSheetModalFlatList).toHaveBeenCalled();
const flatListProps = mockStreamBottomSheetModalFlatList.mock.calls[0]?.[0];
expect(flatListProps).toEqual(
expect.objectContaining({
onEndReached,
testID: 'channel-details-list',
}),
);
});
});