import { fireEvent, render } from '@testing-library/react-native' import React from 'react' import { ConversationFiltersParams } from '../../../screens/conversation_filters/screen_props' import { Conversations } from '../conversations' const mockSetParams = jest.fn() let mockArgs: ConversationFiltersParams = {} let mockFilterDropdownEnabled = false let mockHasNextPage = false jest.mock('@react-navigation/native', () => ({ ...jest.requireActual('@react-navigation/native'), useNavigation: () => ({ setParams: mockSetParams, navigate: jest.fn() }), })) jest.mock('../../../contexts/conversations_context', () => ({ useConversationsContext: () => ({ conversations: [{ id: 1, title: 'Youth Group' }], isLoading: false, isFetched: true, isRefetching: false, isError: false, error: null, hasNextPage: mockHasNextPage, fetchNextPage: jest.fn(), refetch: jest.fn(), args: mockArgs, }), })) jest.mock('../../../hooks/use_chat_permissions', () => ({ useCanCreateConversations: () => false, })) jest.mock('../../../hooks/use_filter_dropdown_enabled', () => ({ useFilterDropdownEnabled: () => mockFilterDropdownEnabled, })) jest.mock('../../../hooks/use_conversations_jolt_events', () => ({ useConversationsJoltEvents: () => {}, })) jest.mock('../conversation_preview', () => ({ ConversationPreview: () => null, ConversationPreviewSkeleton: () => null, })) jest.mock('../conversations_blank_state', () => ({ ConversationsBlankState: () => null, })) describe('Conversations archived footer', () => { beforeEach(() => { mockSetParams.mockClear() mockFilterDropdownEnabled = false mockHasNextPage = false }) it('ends the archived list with a way back to active conversations', () => { mockArgs = { show_archived: true } const view = render() expect(view.getByText('You’re viewing archived results.')).toBeTruthy() fireEvent.press(view.getByLabelText('View active conversations')) expect(mockSetParams).toHaveBeenCalledWith({ title: undefined, chat_group_graph_id: undefined, group_source_app_name: undefined, show_direct_messages: undefined, show_archived: undefined, }) }) it('shows the archived footer instead of the filtered one when the dropdown is on', () => { mockArgs = { show_archived: true } mockFilterDropdownEnabled = true const view = render() expect(view.getByLabelText('View active conversations')).toBeTruthy() expect(view.queryByText('You’re viewing filtered results')).toBeNull() }) it('waits for the last page before showing the archived footer', () => { mockArgs = { show_archived: true } mockHasNextPage = true const view = render() expect(view.queryByLabelText('View active conversations')).toBeNull() }) it('leaves the active list without the archived footer', () => { mockArgs = {} const view = render() expect(view.queryByLabelText('View active conversations')).toBeNull() }) })