Skip to content

Commit 38e27d2

Browse files
BKNDLSS-26551 Add "uniqueEmails" argument to Backendless.Messaging.sendEmailFromTemplate (#222)
* BKNDLSS-26551 Add "uniqueEmails" argument to Backendless.Messaging.sendEmailFromTemplate
1 parent 0774c88 commit 38e27d2

File tree

4 files changed

+107
-16
lines changed

4 files changed

+107
-16
lines changed

backendless.d.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,12 @@ declare module Backendless {
377377

378378
function sendEmailFromTemplate(templateName: string, emailEnvelope: Backendless.EmailEnvelope, templateValues?: object, attachments?: string[]): Promise<object>;
379379

380+
function sendEmailFromTemplate(templateName: string, emailEnvelope: Backendless.EmailEnvelope, templateValues?: object): Promise<object>;
381+
380382
function sendEmailFromTemplate(templateName: string, emailEnvelope: Backendless.EmailEnvelope, attachments?: string[]): Promise<object>;
381383

384+
function sendEmailFromTemplate(templateName: string, emailEnvelope: Backendless.EmailEnvelope): Promise<object>;
385+
382386
function cancel(messageId: string): Promise<boolean>;
383387

384388
function registerDevice(deviceToken: string, channels?: string[], expiration?: number | Date): Promise<Object>;
@@ -495,13 +499,13 @@ declare module Backendless {
495499
export interface CustomServicesI {
496500
invoke(serviceName: string, method: string, parameters?: object): Promise<any>;
497501

498-
invoke(serviceName: string, method: string, parameters: object|null, executionType?: string): Promise<any>;
502+
invoke(serviceName: string, method: string, parameters: object | null, executionType?: string): Promise<any>;
499503

500504
invoke(serviceName: string, method: string, executionType?: string): Promise<any>;
501505

502-
invoke(serviceName: string, method: string, parameters: object|null, executionType?: string): Promise<any>;
506+
invoke(serviceName: string, method: string, parameters: object | null, executionType?: string): Promise<any>;
503507

504-
invoke(serviceName: string, method: string, parameters: object|null, options?: { executionType?: string, httpRequestHeaders?: object }): Promise<any>;
508+
invoke(serviceName: string, method: string, parameters: object | null, options?: { executionType?: string, httpRequestHeaders?: object }): Promise<any>;
505509
}
506510

507511
/**
@@ -862,6 +866,7 @@ declare module Backendless {
862866
ccAddresses: string[];
863867
bccAddresses: string[];
864868
query: string | null;
869+
uniqueEmails: boolean;
865870

866871
constructor(data?: Object);
867872

@@ -888,6 +893,10 @@ declare module Backendless {
888893
setQuery(query: string): Backendless.EmailEnvelope;
889894

890895
getQuery(): string;
896+
897+
setUniqueEmails(uniqueEmails: boolean): Backendless.EmailEnvelope;
898+
899+
getUniqueEmails(): boolean;
891900
}
892901

893902
/**

src/messaging/helpers/email-envelope.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default class EmailEnvelope {
1818
this.ccAddresses = Utils.castArray(data.ccAddresses)
1919
this.bccAddresses = Utils.castArray(data.bccAddresses)
2020
this.query = data.query || null
21+
this.uniqueEmails = data.uniqueEmails || false
2122
}
2223

2324
/**
@@ -129,6 +130,23 @@ export default class EmailEnvelope {
129130
return this.query
130131
}
131132

133+
/**
134+
* @param {boolean} uniqueEmails
135+
* @returns {EmailEnvelope}
136+
*/
137+
setUniqueEmails(uniqueEmails) {
138+
this.uniqueEmails = uniqueEmails
139+
140+
return this
141+
}
142+
143+
/**
144+
* @returns {uniqueEmails|boolean}
145+
*/
146+
getUniqueEmails() {
147+
return this.uniqueEmails
148+
}
149+
132150
toJSON() {
133151
const data = {}
134152

@@ -148,6 +166,8 @@ export default class EmailEnvelope {
148166
data.criteria = this.query
149167
}
150168

169+
data.uniqueEmails = this.uniqueEmails
170+
151171
return data
152172
}
153173
}

test/tsd.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,7 @@ function testUserService() {
946946
function testEmailEnvelope() {
947947
let addresses: string[];
948948
let query: string;
949+
let uniqueEmails: boolean;
949950
let address: string = '[email protected]';
950951
const data: object = {};
951952
let envelopeObject = new Backendless.EmailEnvelope();
@@ -965,6 +966,8 @@ function testEmailEnvelope() {
965966
addresses = envelopeObject.getBcc();
966967
envelopeObject = envelopeObject.setQuery('query');
967968
query = envelopeObject.getQuery();
969+
envelopeObject = envelopeObject.setUniqueEmails(true);
970+
uniqueEmails = envelopeObject.getUniqueEmails();
968971
}
969972

970973
function testMessaging() {

test/unit/specs/messaging/emails.js

Lines changed: 72 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ describe('<Messaging> Emails', function() {
213213
const templateName = 'MY_TEMPLATE_NAME'
214214
const templateValues = { foo: 'bar' }
215215
const attachments = ['path/to/file']
216+
const uniqueEmails = true
216217

217218
beforeEach(() => {
218219
emailEnvelope = new Backendless.EmailEnvelope({ addresses: ['[email protected]'] })
@@ -229,7 +230,8 @@ describe('<Messaging> Emails', function() {
229230
headers: { 'Content-Type': 'application/json' },
230231
body : {
231232
addresses : ['[email protected]'],
232-
'template-name': templateName
233+
'template-name': templateName,
234+
uniqueEmails : false,
233235
}
234236
})
235237

@@ -249,6 +251,7 @@ describe('<Messaging> Emails', function() {
249251
addresses : ['[email protected]'],
250252
'template-name' : templateName,
251253
'template-values': templateValues,
254+
uniqueEmails : false,
252255
}
253256
})
254257

@@ -268,7 +271,8 @@ describe('<Messaging> Emails', function() {
268271
addresses : ['[email protected]'],
269272
'template-name' : templateName,
270273
'template-values': templateValues,
271-
attachment: attachments
274+
attachment : attachments,
275+
uniqueEmails : false,
272276
}
273277
})
274278

@@ -285,9 +289,10 @@ describe('<Messaging> Emails', function() {
285289
path : `${APP_PATH}/emailtemplate/send`,
286290
headers: { 'Content-Type': 'application/json' },
287291
body : {
288-
addresses : ['[email protected]'],
289-
'template-name' : templateName,
290-
attachment: attachments
292+
addresses : ['[email protected]'],
293+
'template-name': templateName,
294+
attachment : attachments,
295+
uniqueEmails : false,
291296
}
292297
})
293298

@@ -299,14 +304,38 @@ describe('<Messaging> Emails', function() {
299304

300305
const result1 = await Backendless.Messaging.sendEmailFromTemplate(templateName, emailEnvelope, attachments)
301306

307+
expect(req1).to.deep.include({
308+
method : 'POST',
309+
path : `${APP_PATH}/emailtemplate/send`,
310+
headers: { 'Content-Type': 'application/json' },
311+
body : {
312+
addresses : ['[email protected]'],
313+
'template-name': templateName,
314+
attachment : ['path/to/file'],
315+
uniqueEmails : false,
316+
}
317+
})
318+
319+
expect(result1).to.be.eql({ fakeResult })
320+
})
321+
322+
it('sends an email with templateValues, attachments and uniqueEmails', async () => {
323+
const req1 = prepareMockRequest({ fakeResult })
324+
325+
emailEnvelope.setUniqueEmails(true)
326+
327+
const result1 = await Backendless.Messaging.sendEmailFromTemplate(templateName, emailEnvelope, templateValues, attachments)
328+
302329
expect(req1).to.deep.include({
303330
method : 'POST',
304331
path : `${APP_PATH}/emailtemplate/send`,
305332
headers: { 'Content-Type': 'application/json' },
306333
body : {
307334
addresses : ['[email protected]'],
308335
'template-name' : templateName,
309-
attachment: attachments
336+
'template-values': { foo: 'bar' },
337+
attachment : attachments,
338+
uniqueEmails : true,
310339
}
311340
})
312341

@@ -360,14 +389,16 @@ describe('<Messaging> Emails', function() {
360389
ccAddresses : ['test-ccAddress'],
361390
bccAddresses: ['test-bccAddress'],
362391
query : 'foo>123',
363-
foo : 123
392+
foo : 123,
393+
uniqueEmails: true,
364394
})
365395

366396
expect(emailEnvelope.toJSON()).to.be.eql({
367397
'addresses' : ['test-address'],
368398
'bcc-addresses': ['test-bccAddress'],
369399
'cc-addresses' : ['test-ccAddress'],
370400
criteria : 'foo>123',
401+
uniqueEmails : true,
371402
})
372403
})
373404

@@ -377,21 +408,23 @@ describe('<Messaging> Emails', function() {
377408
ccAddresses : 'test-ccAddress',
378409
bccAddresses: 'test-bccAddress',
379410
query : 'foo>123',
380-
foo : 123
411+
foo : 123,
412+
uniqueEmails: true
381413
})
382414

383415
expect(emailEnvelope.toJSON()).to.be.eql({
384416
'addresses' : ['test-address'],
385417
'bcc-addresses': ['test-bccAddress'],
386418
'cc-addresses' : ['test-ccAddress'],
387419
criteria : 'foo>123',
420+
uniqueEmails : true,
388421
})
389422
})
390423

391424
it('initial create without any options', async () => {
392425
emailEnvelope = Backendless.EmailEnvelope.create()
393426

394-
expect(emailEnvelope.toJSON()).to.be.eql({})
427+
expect(emailEnvelope.toJSON()).to.be.eql({ uniqueEmails: false })
395428
})
396429

397430
it('checks getters and setters of addresses', async () => {
@@ -412,7 +445,8 @@ describe('<Messaging> Emails', function() {
412445
expect(emailEnvelope.getTo()).to.be.eql(['address-2', 'address-3', 'address-4', 'address-5', 'address-6'])
413446

414447
expect(emailEnvelope.toJSON()).to.be.eql({
415-
addresses: ['address-2', 'address-3', 'address-4', 'address-5', 'address-6']
448+
addresses : ['address-2', 'address-3', 'address-4', 'address-5', 'address-6'],
449+
uniqueEmails: false,
416450
})
417451
})
418452

@@ -434,7 +468,8 @@ describe('<Messaging> Emails', function() {
434468
expect(emailEnvelope.getCc()).to.be.eql(['address-2', 'address-3', 'address-4', 'address-5', 'address-6'])
435469

436470
expect(emailEnvelope.toJSON()).to.be.eql({
437-
'cc-addresses': ['address-2', 'address-3', 'address-4', 'address-5', 'address-6']
471+
'cc-addresses': ['address-2', 'address-3', 'address-4', 'address-5', 'address-6'],
472+
uniqueEmails : false,
438473
})
439474
})
440475

@@ -456,7 +491,8 @@ describe('<Messaging> Emails', function() {
456491
expect(emailEnvelope.getBcc()).to.be.eql(['address-2', 'address-3', 'address-4', 'address-5', 'address-6'])
457492

458493
expect(emailEnvelope.toJSON()).to.be.eql({
459-
'bcc-addresses': ['address-2', 'address-3', 'address-4', 'address-5', 'address-6']
494+
'bcc-addresses': ['address-2', 'address-3', 'address-4', 'address-5', 'address-6'],
495+
uniqueEmails : false
460496
})
461497
})
462498

@@ -470,7 +506,26 @@ describe('<Messaging> Emails', function() {
470506
expect(emailEnvelope.getQuery()).to.be.eql('query-2')
471507

472508
expect(emailEnvelope.toJSON()).to.be.eql({
473-
criteria: 'query-2'
509+
criteria : 'query-2',
510+
uniqueEmails: false,
511+
})
512+
})
513+
514+
it('checks getters and setters of uniqueEmails', async () => {
515+
emailEnvelope.setUniqueEmails(true)
516+
517+
expect(emailEnvelope.getUniqueEmails()).to.be.eql(true)
518+
519+
expect(emailEnvelope.toJSON()).to.be.eql({
520+
uniqueEmails: true,
521+
})
522+
523+
emailEnvelope.setUniqueEmails(false)
524+
525+
expect(emailEnvelope.getUniqueEmails()).to.be.eql(false)
526+
527+
expect(emailEnvelope.toJSON()).to.be.eql({
528+
uniqueEmails: false,
474529
})
475530
})
476531

@@ -494,11 +549,15 @@ describe('<Messaging> Emails', function() {
494549
.setQuery('query-1')
495550
.setQuery('query-2')
496551

552+
.setUniqueEmails(false)
553+
.setUniqueEmails(true)
554+
497555
expect(emailEnvelope.toJSON()).to.be.eql({
498556
'addresses' : ['address-2', 'address-3', 'address-3', 'address-4', 'address-5',],
499557
'bcc-addresses': ['address-2', 'address-3', 'address-4', 'address-5', 'address-6',],
500558
'cc-addresses' : ['address-2', 'address-3', 'address-4', 'address-5', 'address-6',],
501559
'criteria' : 'query-2',
560+
'uniqueEmails' : true,
502561
})
503562
})
504563

0 commit comments

Comments
 (0)