import type { Channel } from 'stream-chat'
import { describe, expect, it, vi } from 'vitest'
import { fireEvent, renderWithProviders, screen } from '../../test/utils'
import {
ChannelListProvider,
useChannelListContext,
} from './ChannelListContext'
const channel = { id: 'channel-1' } as Channel
function ContextConsumer() {
const value = useChannelListContext()
return (
{value.selectedChannel?.id ?? 'undefined'}
{String(value.debug)}
{value.renderMessagePreview ? 'provided' : 'undefined'}
{value.channelPreview ? 'provided' : 'undefined'}
{value.viewerLanguage ?? 'undefined'}
)
}
describe('ChannelListContext', () => {
it('provides safe documented defaults without a provider', () => {
renderWithProviders()
expect(screen.getByTestId('selected-channel')).toHaveTextContent(
'undefined'
)
expect(screen.getByTestId('debug')).toHaveTextContent('false')
expect(screen.getByTestId('render-message-preview')).toHaveTextContent(
'undefined'
)
expect(screen.getByTestId('channel-preview')).toHaveTextContent('undefined')
expect(screen.getByTestId('viewer-language')).toHaveTextContent('undefined')
expect(() => fireEvent.click(screen.getByRole('button'))).not.toThrow()
})
it('exposes the value supplied by a provider', () => {
const onChannelSelect = vi.fn()
const ChannelPreview = () => null
const renderMessagePreview = () => 'preview'
renderWithProviders(
)
expect(screen.getByTestId('selected-channel')).toHaveTextContent(
'channel-1'
)
expect(screen.getByTestId('debug')).toHaveTextContent('true')
expect(screen.getByTestId('render-message-preview')).toHaveTextContent(
'provided'
)
expect(screen.getByTestId('channel-preview')).toHaveTextContent('provided')
expect(screen.getByTestId('viewer-language')).toHaveTextContent('es')
fireEvent.click(screen.getByRole('button'))
expect(onChannelSelect).toHaveBeenCalledWith(channel)
})
})