diff --git a/lib/api.ts b/lib/api.ts index d41c19c..4899829 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -226,7 +226,7 @@ export class APIClient { * @param recipients Recipient selector. See above. * @returns The parsed JSON response body. */ - triggerBroadcast(broadcastId: string | number, data: RequestData, recipients: Recipients) { + triggerBroadcast(broadcastId: string | number, data: RequestData = {}, recipients: Recipients = {}) { let payload = {}; let customRecipientField = ( Object.keys(BROADCASTS_ALLOWED_RECIPIENT_FIELDS) as BroadcastsAllowedRecipientFieldsKeys[] @@ -234,11 +234,13 @@ export class APIClient { if (customRecipientField) { payload = Object.assign({ data }, filterRecipientsDataForField(recipients, customRecipientField)); - } else { + } else if (Object.keys(recipients).length > 0) { payload = { data, recipients, }; + } else { + payload = { data }; } return this.request.post(`${this.apiRoot}/campaigns/${encodeURIComponent(broadcastId)}/triggers`, payload); diff --git a/test/api.ts b/test/api.ts index 9127a41..4aa0436 100644 --- a/test/api.ts +++ b/test/api.ts @@ -299,6 +299,36 @@ test('#sendEmail: error', async (t) => { t.truthy((t.context.client.request.post as SinonStub).calledWith(`${RegionUS.apiUrl}/send/email`, req.message)); }); +test('#triggerBroadcast works with no data or recipients', (t) => { + sinon.stub(t.context.client.request, 'post'); + t.context.client.triggerBroadcast(1); + t.truthy( + (t.context.client.request.post as SinonStub).calledWith(`${RegionUS.apiUrl}/campaigns/1/triggers`, { + data: {}, + }), + ); +}); + +test('#triggerBroadcast works with data only', (t) => { + sinon.stub(t.context.client.request, 'post'); + t.context.client.triggerBroadcast(1, { type: 'data' }); + t.truthy( + (t.context.client.request.post as SinonStub).calledWith(`${RegionUS.apiUrl}/campaigns/1/triggers`, { + data: { type: 'data' }, + }), + ); +}); + +test('#triggerBroadcast works with empty recipients', (t) => { + sinon.stub(t.context.client.request, 'post'); + t.context.client.triggerBroadcast(1, { type: 'data' }, {}); + t.truthy( + (t.context.client.request.post as SinonStub).calledWith(`${RegionUS.apiUrl}/campaigns/1/triggers`, { + data: { type: 'data' }, + }), + ); +}); + test('#triggerBroadcast works', (t) => { sinon.stub(t.context.client.request, 'post'); t.context.client.triggerBroadcast(1, { type: 'data' }, { type: 'recipients' });