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()
})
})