1/* eslint-env jest */
2import * as RPCChatTypes from '../../types/rpc-chat-gen'
3import {serviceMessageTypeToMessageTypes} from '../message'
4
5const cases = [
6  {in: RPCChatTypes.MessageType.none, out: []},
7  {in: RPCChatTypes.MessageType.text, out: ['text']},
8  {in: RPCChatTypes.MessageType.attachment, out: ['attachment']},
9  {in: RPCChatTypes.MessageType.edit, out: []},
10  {in: RPCChatTypes.MessageType.delete, out: []},
11  {in: RPCChatTypes.MessageType.metadata, out: ['setDescription']},
12  {in: RPCChatTypes.MessageType.tlfname, out: []},
13  {in: RPCChatTypes.MessageType.headline, out: ['setChannelname']},
14  {in: RPCChatTypes.MessageType.attachmentuploaded, out: ['attachment']},
15  {in: RPCChatTypes.MessageType.join, out: ['systemJoined']},
16  {in: RPCChatTypes.MessageType.leave, out: ['systemLeft']},
17  {
18    in: RPCChatTypes.MessageType.system,
19    out: [
20      'systemAddedToTeam',
21      'systemChangeRetention',
22      'systemCreateTeam',
23      'systemGitPush',
24      'systemInviteAccepted',
25      'systemSBSResolved',
26      'systemSimpleToComplex',
27      'systemText',
28      'systemUsersAddedToConversation',
29      'systemChangeAvatar',
30      'systemNewChannel',
31    ],
32  },
33  {in: RPCChatTypes.MessageType.deletehistory, out: []},
34  {in: RPCChatTypes.MessageType.reaction, out: []},
35  {in: RPCChatTypes.MessageType.unfurl, out: []},
36  {in: RPCChatTypes.MessageType.sendpayment, out: ['sendPayment']},
37  {in: RPCChatTypes.MessageType.requestpayment, out: ['requestPayment']},
38  {in: RPCChatTypes.MessageType.flip, out: []},
39  {in: RPCChatTypes.MessageType.pin, out: []},
40]
41
42describe('serviceMessageTypeToMessageTypes', () => {
43  it('returns the expected types', () => {
44    cases.forEach(c => expect(serviceMessageTypeToMessageTypes(c.in).sort()).toEqual(c.out.sort()))
45  })
46  it('handles all service message types', () => {
47    const handledTypes = cases.map(c => c.in)
48    const serviceTypes = Object.values(RPCChatTypes.MessageType).filter(
49      k => typeof RPCChatTypes.MessageType[k as any] !== 'number'
50    )
51    expect(handledTypes.sort()).toEqual(serviceTypes.sort())
52  })
53})
54