diff --git a/packages/messaging-api-messenger/README.md b/packages/messaging-api-messenger/README.md index 46ab574d..65f334d2 100644 --- a/packages/messaging-api-messenger/README.md +++ b/packages/messaging-api-messenger/README.md @@ -1241,7 +1241,7 @@ Retrieves the current value of one or more Messenger Profile properties by name. Param | Type | Description ------ | --------------- | ----------- -fields | `Array` | Value must be among `account_linking_url | persistent_menu | get_started | greeting | whitelisted_domains | payment_settings | target_audience | home_url`. +fields | `Array` | Value must be among `account_linking_url`, `persistent_menu`, `get_started`, `greeting`, `whitelisted_domains`, `payment_settings`, `target_audience`, `home_url`. Example: ```js @@ -1312,7 +1312,7 @@ Deletes one or more Messenger Profile properties. Only properties specified in t Param | Type | Description ------ | --------------- | ----------- -fields | `Array` | Value must be among `account_linking_url | persistent_menu | get_started | greeting | whitelisted_domains | payment_settings | target_audience | home_url`. +fields | `Array` | Value must be among `account_linking_url`, `persistent_menu`, `get_started`, `greeting`, `whitelisted_domains`, `payment_settings`, `target_audience`, `home_url`. Example: ```js diff --git a/packages/messaging-api-messenger/src/MessengerClient.js b/packages/messaging-api-messenger/src/MessengerClient.js index 99f13d86..06daaa23 100644 --- a/packages/messaging-api-messenger/src/MessengerClient.js +++ b/packages/messaging-api-messenger/src/MessengerClient.js @@ -149,10 +149,12 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/get-started-button */ - getGetStarted = (): Promise => - this.getMessengerProfile(['get_started']).then(res => res[0].get_started); + getGetStarted = (): Promise => + this.getMessengerProfile(['get_started']).then( + res => (res[0] ? res[0].get_started : null) + ); - getGetStartedButton = (): Promise => { + getGetStartedButton = (): Promise => { warning( false, '`getGetStartedButton` is deprecated, use `getGetStarted` instead' @@ -191,9 +193,9 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/persistent-menu */ - getPersistentMenu = (): Promise => + getPersistentMenu = (): Promise => this.getMessengerProfile(['persistent_menu']).then( - res => res[0].persistent_menu + res => (res[0] ? res[0].persistent_menu : null) ); setPersistentMenu = ( @@ -227,10 +229,12 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/greeting-text */ - getGreeting = (): Promise => - this.getMessengerProfile(['greeting']).then(res => res[0].greeting); + getGreeting = (): Promise => + this.getMessengerProfile(['greeting']).then( + res => (res[0] ? res[0].greeting : null) + ); - getGreetingText = (): Promise => { + getGreetingText = (): Promise => { warning( false, '`getGreetingText` is deprecated, use `getGreeting` instead' @@ -283,7 +287,7 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/domain-whitelisting */ - getDomainWhitelist = (): Promise => { + getDomainWhitelist = (): Promise => { warning( false, '`getDomainWhitelist` is deprecated. use `getWhitelistedDomains` instead.' @@ -314,9 +318,9 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/domain-whitelisting */ - getWhitelistedDomains = (): Promise => + getWhitelistedDomains = (): Promise => this.getMessengerProfile(['whitelisted_domains']).then( - res => res[0].whitelisted_domains + res => (res[0] ? res[0].whitelisted_domains : null) ); setWhitelistedDomains = ( @@ -334,8 +338,10 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/account-linking-url */ - getAccountLinkingURL = (): Promise => - this.getMessengerProfile(['account_linking_url']).then(res => res[0]); + getAccountLinkingURL = (): Promise => + this.getMessengerProfile(['account_linking_url']).then( + res => (res[0] ? res[0] : null) + ); setAccountLinkingURL = (url: string): Promise => this.setMessengerProfile({ @@ -350,8 +356,10 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/payment-settings */ - getPaymentSettings = (): Promise => - this.getMessengerProfile(['payment_settings']).then(res => res[0]); + getPaymentSettings = (): Promise => + this.getMessengerProfile(['payment_settings']).then( + res => (res[0] ? res[0] : null) + ); setPaymentPrivacyPolicyURL = ( url: string @@ -386,8 +394,10 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/target-audience */ - getTargetAudience = (): Promise => - this.getMessengerProfile(['target_audience']).then(res => res[0]); + getTargetAudience = (): Promise => + this.getMessengerProfile(['target_audience']).then( + res => (res[0] ? res[0] : null) + ); setTargetAudience = ( type: string, @@ -412,10 +422,12 @@ export default class MessengerClient { * * https://developers.facebook.com/docs/messenger-platform/messenger-profile/home-url */ - getHomeURL = (): Promise => - this.getMessengerProfile(['home_url']).then(res => res[0]); + getHomeURL = (): Promise => + this.getMessengerProfile(['home_url']).then( + res => (res[0] ? res[0] : null) + ); - getChatExtensionHomeURL = (): Promise => { + getChatExtensionHomeURL = (): Promise => { warning( false, '`getChatExtensionHomeURL` is deprecated. use `getHomeURL` instead.' diff --git a/packages/messaging-api-messenger/src/__tests__/MessengerClient.spec.js b/packages/messaging-api-messenger/src/__tests__/MessengerClient.spec.js index e0613cd4..6bf4fff8 100644 --- a/packages/messaging-api-messenger/src/__tests__/MessengerClient.spec.js +++ b/packages/messaging-api-messenger/src/__tests__/MessengerClient.spec.js @@ -294,6 +294,24 @@ describe('get started button', () => { payload: 'GET_STARTED', }); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=get_started&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getGetStartedButton(); + + expect(res).toEqual(null); + }); }); describe('#setGetStartedButton', () => { @@ -396,6 +414,24 @@ describe('persistent menu', () => { }, ]); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=persistent_menu&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getPersistentMenu(); + + expect(res).toEqual(null); + }); }); describe('#setPersistentMenu', () => { @@ -760,6 +796,20 @@ describe('greeting text', () => { }, ]); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock.onGet().reply(200, reply); + + const res = await client.getGreetingText(); + + expect(res).toEqual(null); + }); }); describe('#setGreetingText', () => { @@ -867,6 +917,24 @@ describe('whitelisted domains', () => { expect(res).toEqual(['http://www.yoctol.com/']); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=whitelisted_domains&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getWhitelistedDomains(); + + expect(res).toEqual(null); + }); }); describe('#setWhitelistedDomains', () => { @@ -937,6 +1005,24 @@ describe('account linking url', () => { 'https://www.example.com/oauth?response_type=code&client_id=1234567890&scope=basic', }); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=account_linking_url&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getAccountLinkingURL(); + + expect(res).toEqual(null); + }); }); describe('#setAccountLinkingURL', () => { @@ -1012,6 +1098,24 @@ describe('payment settings', () => { test_users: ['12345678'], }); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=payment_settings&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getPaymentSettings(); + + expect(res).toEqual(null); + }); }); describe('#setPaymentPrivacyPolicyURL', () => { @@ -1134,6 +1238,24 @@ describe('target audience', () => { }, }); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=target_audience&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getTargetAudience(); + + expect(res).toEqual(null); + }); }); describe('#setTargetAudience', () => { @@ -1240,6 +1362,24 @@ describe('chat extension home URL', () => { in_test: true, }); }); + + it('should response null when data is an empty array', async () => { + const { client, mock } = createMock(); + + const reply = { + data: [], + }; + + mock + .onGet( + `/me/messenger_profile?fields=home_url&access_token=${ACCESS_TOKEN}` + ) + .reply(200, reply); + + const res = await client.getChatExtensionHomeURL(); + + expect(res).toEqual(null); + }); }); describe('#setChatExtensionHomeURL', () => {