import { LocalMessage } from 'stream-chat' import { describe, expect, it } from 'vitest' import { renderWithProviders, screen } from '../../test/utils' import { MessageTag } from './MessageTag' interface MockMessageOptions { metadata?: { custom_type?: 'MESSAGE_CHATBOT' | 'MESSAGE_PAID' amount_text?: string } text?: string } const createMockMessage = (options?: MockMessageOptions): LocalMessage => ({ id: 'msg-1', text: options?.text ?? 'Hello world', type: 'regular', created_at: new Date(), updated_at: new Date(), metadata: options?.metadata, }) as LocalMessage describe('MessageTag', () => { it('renders receiver chatbot text variant with DM Agent copy and icon first', () => { renderWithProviders( ) const indicator = screen.getByTestId('message-chatbot-indicator') expect(indicator).toHaveTextContent('Sent by AI Assistant') // icon first, then label expect(indicator.children[0].querySelector('svg')).not.toBeNull() expect(indicator.children[1]).toHaveTextContent('Sent by AI Assistant') }) it('renders sender chatbot text variant with mirrored order', () => { renderWithProviders( ) const indicator = screen.getByTestId('message-chatbot-indicator') expect(indicator).toHaveTextContent('Sent by AI Assistant') // label first, then icon (mirrored) expect(indicator.children[0]).toHaveTextContent('Sent by AI Assistant') expect(indicator.children[1].querySelector('svg')).not.toBeNull() }) it('renders sender attachment chatbot variant outside-footer copy', () => { renderWithProviders( ) const indicator = screen.getByTestId('message-chatbot-indicator') expect(indicator).toHaveTextContent('Sent with AI') // icon first, then label expect(indicator.children[0].querySelector('svg')).not.toBeNull() expect(indicator.children[1]).toHaveTextContent('Sent with AI') }) it('renders the "Delivered with $X message" paid tag', () => { renderWithProviders( ) const paidTag = screen.getByText('Delivered with $10.00 message') expect(paidTag.closest('.message-tag--paid')).not.toBeNull() }) it('returns null for a paid message with no amount_text', () => { const { container } = renderWithProviders( ) expect(container.firstChild).toBeNull() }) it('returns null for non-custom messages', () => { const { container } = renderWithProviders( ) expect(container.firstChild).toBeNull() }) })