import conversationAPI from '../../inbox/conversation'; import ApiClient from '../../ApiClient'; import describeWithAPIMock from '../apiSpecHelper'; describe('#ConversationAPI', () => { it('creates correct instance', () => { expect(conversationAPI).toBeInstanceOf(ApiClient); expect(conversationAPI).toHaveProperty('get'); expect(conversationAPI).toHaveProperty('show'); expect(conversationAPI).toHaveProperty('create'); expect(conversationAPI).toHaveProperty('update'); expect(conversationAPI).toHaveProperty('delete'); expect(conversationAPI).toHaveProperty('toggleStatus'); expect(conversationAPI).toHaveProperty('assignAgent'); expect(conversationAPI).toHaveProperty('assignTeam'); expect(conversationAPI).toHaveProperty('markMessageRead'); expect(conversationAPI).toHaveProperty('toggleTyping'); expect(conversationAPI).toHaveProperty('mute'); expect(conversationAPI).toHaveProperty('unmute'); expect(conversationAPI).toHaveProperty('meta'); expect(conversationAPI).toHaveProperty('sendEmailTranscript'); expect(conversationAPI).toHaveProperty('filter'); expect(conversationAPI).toHaveProperty('fullSearch'); }); describeWithAPIMock('API calls', context => { it('#get conversations', () => { conversationAPI.get({ inboxId: 1, status: 'open', assigneeType: 'me', page: 1, labels: [], teamId: 1, }); expect(context.axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations', { params: { inbox_id: 1, team_id: 1, status: 'open', assignee_type: 'me', page: 1, labels: [], }, } ); }); it('#search', () => { conversationAPI.search({ q: 'leads', page: 1, }); expect(context.axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/search', { params: { q: 'leads', page: 1, }, } ); }); it('#fullSearch', () => { conversationAPI.fullSearch({ q: 'john' }); expect(context.axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/text_search', { params: { q: 'john' }, } ); }); it('#toggleStatus', () => { conversationAPI.toggleStatus({ conversationId: 12, status: 'online' }); expect(context.axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/toggle_status`, { status: 'online', snoozed_until: null, } ); }); it('#assignAgent', () => { conversationAPI.assignAgent({ conversationId: 12, agentId: 34 }); expect(context.axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/assignments?assignee_id=34`, {} ); }); it('#assignTeam', () => { conversationAPI.assignTeam({ conversationId: 12, teamId: 1 }); expect(context.axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/assignments`, { team_id: 1, } ); }); it('#markMessageRead', () => { conversationAPI.markMessageRead({ id: 12 }); expect(context.axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/update_last_seen` ); }); it('#toggleTyping', () => { conversationAPI.toggleTyping({ conversationId: 12, status: 'typing_on', }); expect(context.axiosMock.post).toHaveBeenCalledWith( `/api/v1/conversations/12/toggle_typing_status`, { typing_status: 'typing_on', } ); }); it('#mute', () => { conversationAPI.mute(45); expect(context.axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/mute' ); }); it('#unmute', () => { conversationAPI.unmute(45); expect(context.axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/unmute' ); }); it('#meta', () => { conversationAPI.meta({ inboxId: 1, status: 'open', assigneeType: 'me', labels: [], teamId: 1, }); expect(context.axiosMock.get).toHaveBeenCalledWith( '/api/v1/conversations/meta', { params: { inbox_id: 1, team_id: 1, status: 'open', assignee_type: 'me', labels: [], }, } ); }); it('#sendEmailTranscript', () => { conversationAPI.sendEmailTranscript({ conversationId: 45, email: 'john@acme.inc', }); expect(context.axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/transcript', { email: 'john@acme.inc', } ); }); it('#updateCustomAttributes', () => { conversationAPI.updateCustomAttributes({ conversationId: 45, customAttributes: { order_d: '1001' }, }); expect(context.axiosMock.post).toHaveBeenCalledWith( '/api/v1/conversations/45/custom_attributes', { custom_attributes: { order_d: '1001' }, } ); }); it('#filter', () => { const payload = { page: 1, queryData: { payload: [ { attribute_key: 'status', filter_operator: 'equal_to', values: ['pending', 'resolved'], query_operator: 'and', }, { attribute_key: 'assignee', filter_operator: 'equal_to', values: [3], query_operator: 'and', }, { attribute_key: 'id', filter_operator: 'equal_to', values: ['This is a test'], query_operator: null, }, ], }, }; conversationAPI.filter(payload); expect( context.axiosMock.post ).toHaveBeenCalledWith( '/api/v1/conversations/filter', payload.queryData, { params: { page: payload.page } } ); }); }); });