import { MessageResource } from '../../types' import { isSystemMessage } from '../../utils/system_messages' const makeMessage = (overrides: Partial = {}): MessageResource => ({ type: 'Message', id: '1', text: null, html: '', createdAt: '2026-01-01T00:00:00Z', deletedAt: null, textEditedAt: null, mine: false, attachments: [], author: { id: -1, type: 'Person', name: 'System', avatar: '' }, reactionCounts: [], replyCount: 0, replyRootId: null, messageType: 'user', personIdsForSystemEvent: null, systemTextParts: null, systemTextFormat: null, ...overrides, }) const joinedParts = { names: ['Alice'], overflowCount: 0, action: 'joined the conversation' } describe('isSystemMessage', () => { it('returns true for people messages with names and person ids', () => { const message = makeMessage({ messageType: 'user_joined', systemTextFormat: 'people', personIdsForSystemEvent: [1], systemTextParts: joinedParts, }) expect(isSystemMessage(message)).toBe(true) }) it('returns true for actor messages of a type the client does not know', () => { const message = makeMessage({ messageType: 'some_future_type', systemTextFormat: 'actor', text: 'This conversation was archived by Alice', }) expect(isSystemMessage(message)).toBe(true) }) it('returns false for messages without a system text format', () => { const message = makeMessage({ messageType: 'user_joined', systemTextParts: joinedParts }) expect(isSystemMessage(message)).toBe(false) }) it('returns false for people messages without systemTextParts', () => { const message = makeMessage({ systemTextFormat: 'people', personIdsForSystemEvent: [1] }) expect(isSystemMessage(message)).toBe(false) }) it('returns false for people messages without personIdsForSystemEvent', () => { const message = makeMessage({ systemTextFormat: 'people', systemTextParts: joinedParts }) expect(isSystemMessage(message)).toBe(false) }) it.each([null, ''])('returns false for actor messages with text %p', text => { const message = makeMessage({ systemTextFormat: 'actor', text }) expect(isSystemMessage(message)).toBe(false) }) })