import MockAdapter from 'axios-mock-adapter'; import MessengerClient from '../MessengerClient'; const ACCESS_TOKEN = '1234567890'; let axios; let _create; beforeEach(() => { axios = require('axios'); _create = axios.create; }); afterEach(() => { axios.create = _create; }); const createMock = (): { client: MessengerClient; mock: MockAdapter } => { const client = new MessengerClient({ accessToken: ACCESS_TOKEN, }); const mock = new MockAdapter(client.axios); return { client, mock }; }; describe('Page Messaging Insights API', () => { describe('#getInsights', () => { it('should call api get Insight data', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_reported_conversations_unique', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_reported_conversations_unique&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getInsights([ 'page_messages_reported_conversations_unique', ]); expect(res).toEqual([ { name: 'page_messages_reported_conversations_unique', }, ]); }); it('support multiple metrics', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_reported_conversations_unique', }, { name: 'page_messages_blocked_conversations_unique', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_reported_conversations_unique%2Cpage_messages_blocked_conversations_unique&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getInsights([ 'page_messages_reported_conversations_unique', 'page_messages_blocked_conversations_unique', ]); expect(res).toEqual([ { name: 'page_messages_reported_conversations_unique', }, { name: 'page_messages_blocked_conversations_unique', }, ]); }); }); describe('#getBlockedConversations', () => { it('should call api get Insight data', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_blocked_conversations_unique', period: 'day', values: [ { value: 83111, end_time: '2017-02-02T08:00:00+0000', }, { value: 85215, end_time: '2017-02-03T08:00:00+0000', }, { value: 87175, end_time: '2017-02-04T08:00:00+0000', }, ], title: 'Daily unique blocked conversations count', description: 'Daily: The number of conversations with the Page that have been blocked.', id: '1234567/insights/?metric=page_messages_blocked_conversations_unique/day', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_blocked_conversations_unique&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getBlockedConversations(); expect(res).toEqual({ name: 'page_messages_blocked_conversations_unique', period: 'day', values: [ { value: 83111, endTime: '2017-02-02T08:00:00+0000', }, { value: 85215, endTime: '2017-02-03T08:00:00+0000', }, { value: 87175, endTime: '2017-02-04T08:00:00+0000', }, ], title: 'Daily unique blocked conversations count', description: 'Daily: The number of conversations with the Page that have been blocked.', id: '1234567/insights/?metric=page_messages_blocked_conversations_unique/day', }); }); }); describe('#getReportedConversations', () => { it('should call api get Insight data', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_reported_conversations_unique', period: 'day', values: [ { value: 83111, end_time: '2017-02-02T08:00:00+0000', }, { value: 85215, end_time: '2017-02-03T08:00:00+0000', }, { value: 87175, end_time: '2017-02-04T08:00:00+0000', }, ], title: 'Daily unique reported conversations count', description: 'Daily: The number of conversations from your Page that have been reported by people for reasons such as spam, or containing inappropriate content.', id: '1234567/insights/?metric=page_messages_reported_conversations_unique/day', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_reported_conversations_unique&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getReportedConversations(); expect(res).toEqual({ name: 'page_messages_reported_conversations_unique', period: 'day', values: [ { value: 83111, endTime: '2017-02-02T08:00:00+0000', }, { value: 85215, endTime: '2017-02-03T08:00:00+0000', }, { value: 87175, endTime: '2017-02-04T08:00:00+0000', }, ], title: 'Daily unique reported conversations count', description: 'Daily: The number of conversations from your Page that have been reported by people for reasons such as spam, or containing inappropriate content.', id: '1234567/insights/?metric=page_messages_reported_conversations_unique/day', }); }); }); describe('#getTotalMessagingConnections', () => { it('should call api get Insight data', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_total_messaging_connections', period: 'day', values: [ { value: 1000, end_time: '2018-03-12T07:00:00+0000' }, { value: 1000, end_time: '2018-03-13T07:00:00+0000' }, ], title: 'Messaging connections', description: 'Daily: The number of people who have sent a message to your business, not including people who have blocked or reported your business on Messenger. (This number only includes connections made since October 2016.)', id: '1386473101668063/insights/page_messages_total_messaging_connections/day', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_total_messaging_connections&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getTotalMessagingConnections(); expect(res).toEqual({ name: 'page_messages_total_messaging_connections', period: 'day', values: [ { value: 1000, endTime: '2018-03-12T07:00:00+0000' }, { value: 1000, endTime: '2018-03-13T07:00:00+0000' }, ], title: 'Messaging connections', description: 'Daily: The number of people who have sent a message to your business, not including people who have blocked or reported your business on Messenger. (This number only includes connections made since October 2016.)', id: '1386473101668063/insights/page_messages_total_messaging_connections/day', }); }); }); describe('#getNewConversations', () => { it('should call api get Insight data', async () => { const { client, mock } = createMock(); const reply = { data: [ { name: 'page_messages_new_conversations_unique', period: 'day', values: [ { value: 1, end_time: '2018-03-12T07:00:00+0000' }, { value: 0, end_time: '2018-03-13T07:00:00+0000' }, ], title: 'Daily unique new conversations count', description: 'Daily: The number of messaging conversations on Facebook Messenger that began with people who had never messaged with your business before.', id: '1386473101668063/insights/page_messages_new_conversations_unique/day', }, ], }; mock .onGet( `/me/insights/?metric=page_messages_new_conversations_unique&access_token=${ACCESS_TOKEN}` ) .reply(200, reply); const res = await client.getNewConversations(); expect(res).toEqual({ name: 'page_messages_new_conversations_unique', period: 'day', values: [ { value: 1, endTime: '2018-03-12T07:00:00+0000' }, { value: 0, endTime: '2018-03-13T07:00:00+0000' }, ], title: 'Daily unique new conversations count', description: 'Daily: The number of messaging conversations on Facebook Messenger that began with people who had never messaged with your business before.', id: '1386473101668063/insights/page_messages_new_conversations_unique/day', }); }); }); });