import type { Channel } from 'stream-chat' import { describe, expect, it, vi, beforeEach } from 'vitest' import { restorePendingMessages } from './useRestorePendingMessages' const createChannel = ( overrides: { cid?: string pending_messages?: Array<{ message: Record pending_message_metadata?: Record }> } = {} ) => ({ cid: overrides.cid ?? 'messaging:channel-1', state: { pending_messages: overrides.pending_messages ?? [], addMessageSorted: vi.fn(), }, }) as unknown as Channel describe('restorePendingMessages', () => { beforeEach(() => { vi.clearAllMocks() }) it('adds all pending messages to channel state', () => { const pendingMsg = { message: { id: 'msg-1', text: 'Hello', }, } const channel = createChannel({ pending_messages: [pendingMsg] }) restorePendingMessages(channel) expect(channel.state.addMessageSorted).toHaveBeenCalledOnce() expect(channel.state.addMessageSorted).toHaveBeenCalledWith( pendingMsg.message ) }) it('restores multiple pending messages', () => { const msg1 = { message: { id: 'msg-1', text: 'First message', }, } const msg2 = { message: { id: 'msg-2', text: 'Second message', }, } const channel = createChannel({ pending_messages: [msg1, msg2] }) restorePendingMessages(channel) expect(channel.state.addMessageSorted).toHaveBeenCalledTimes(2) expect(channel.state.addMessageSorted).toHaveBeenCalledWith(msg1.message) expect(channel.state.addMessageSorted).toHaveBeenCalledWith(msg2.message) }) it('does nothing when there are no pending messages', () => { const channel = createChannel({ pending_messages: [] }) restorePendingMessages(channel) expect(channel.state.addMessageSorted).not.toHaveBeenCalled() }) it('does nothing when pending_messages is undefined', () => { const channel = { cid: 'messaging:channel-1', state: { pending_messages: undefined, addMessageSorted: vi.fn(), }, } as unknown as Channel restorePendingMessages(channel) expect(channel.state.addMessageSorted).not.toHaveBeenCalled() }) it('handles pending messages with no metadata gracefully', () => { const noMetadataMsg = { message: { id: 'msg-1', text: 'No metadata' }, } const channel = createChannel({ pending_messages: [noMetadataMsg], }) restorePendingMessages(channel) expect(channel.state.addMessageSorted).toHaveBeenCalledOnce() expect(channel.state.addMessageSorted).toHaveBeenCalledWith( noMetadataMsg.message ) }) })