feat(nodemailer): Increased code-coverage of nodemailer.js

This commit is contained in:
Daniel Gonzalez
2020-11-18 16:25:18 -04:00
parent eaae09f7d0
commit c8260aeb29
2 changed files with 79 additions and 46 deletions
+18 -18
View File
@@ -17,6 +17,20 @@ class NodeMailer {
this.config = config
_this = this
_this.transporter = _this.createTransporter()
}
createTransporter () {
const transporter = _this.nodemailer.createTransport({
host: _this.config.emailServer,
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: _this.config.emailUser, // generated ethereal user
pass: _this.config.emailPassword // generated ethereal password
}
})
return transporter
}
// Validate email
@@ -44,10 +58,7 @@ class NodeMailer {
throw new Error("Property 'to' must be a array!")
}
const isEmailList = await _this.validateEmailArray(data.to)
if (!isEmailList) {
throw new Error("Property 'to' must be array of email format!")
}
await _this.validateEmailArray(data.to)
if (!data.formMessage || typeof data.formMessage !== 'string') {
throw new Error("Property 'message' must be a string!")
@@ -61,18 +72,6 @@ class NodeMailer {
throw new Error("Property 'payloadTitle' must be a string!")
}
// create reusable transporter object using the default SMTP transport
const transporter = await _this.nodemailer.createTransport({
host: _this.config.emailServer,
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: _this.config.emailUser, // generated ethereal user
pass: _this.config.emailPassword // generated ethereal password
}
})
// console.log(`transporter: ${JSON.stringify(transporter)}`)
const msg = data.formMessage.replace(/(\r\n|\n|\r)/g, '<br />')
const now = new Date()
@@ -115,7 +114,7 @@ class NodeMailer {
${htmlData}
</p>`
// send mail with defined transport object
const info = await transporter.sendMail({
const info = await _this.transporter.sendMail({
// from: `${data.email}`, // sender address
from: 'noreply@launchpadip.net',
to: `${to}`, // list of receivers
@@ -125,8 +124,9 @@ class NodeMailer {
html: htmlMsg
})
console.log('Message sent: %s', info.messageId)
return info
} catch (err) {
console.log('Error in sendEmail()')
wlogger.error('Error in lib/nodemailer.js/sendEmail()')
throw err
}
}
+51 -18
View File
@@ -1,9 +1,23 @@
const assert = require('chai').assert
const NodeMailer = require('../src/lib/nodemailer')
const nodemailer = new NodeMailer()
const sinon = require('sinon')
const util = require('util')
util.inspect.defaultOptions = { depth: 1 }
let sandbox
let uut
describe('NodeMailer', () => {
beforeEach(() => {
uut = new NodeMailer()
sandbox = sinon.createSandbox()
})
afterEach(() => sandbox.restore())
describe('sendEmail()', () => {
it('should throw error if email property is not provided', async () => {
try {
@@ -13,7 +27,7 @@ describe('NodeMailer', () => {
subject: 'test subject',
to: ['test2@email.com']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'email\' must be a string!')
@@ -28,7 +42,7 @@ describe('NodeMailer', () => {
subject: 'test subject',
to: ['test2@email.com']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'email\' must be email format!')
@@ -42,7 +56,7 @@ describe('NodeMailer', () => {
subject: 'test subject',
to: ['test2@email.com']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'message\' must be a string!')
@@ -55,7 +69,7 @@ describe('NodeMailer', () => {
name: 'test name',
subject: 'test subject'
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'to\' must be a array!')
@@ -71,7 +85,7 @@ describe('NodeMailer', () => {
subject: 'test subject',
to: ['test']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Array must contain emails format!')
@@ -86,7 +100,7 @@ describe('NodeMailer', () => {
name: 'test name',
to: ['test2@email.com']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'subject\' must be a string!')
@@ -101,34 +115,53 @@ describe('NodeMailer', () => {
subject: 'test subject',
to: ['test2@email.com']
}
await nodemailer.sendEmail(data)
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'payloadTitle\' must be a string!')
}
})
it('should throw error if payloadTitle property is not string', async () => {
try {
const data = {
email: 'test@email.com',
formMessage: 'test msg',
name: 'test name',
subject: 'test subject',
to: ['test2@email.com'],
payloadTitle: true
}
await uut.sendEmail(data)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'payloadTitle\' must be a string!')
}
})
/* it('should send email', async () => {
it('should send email', async () => {
try {
sandbox.stub(uut.transporter, 'sendMail').resolves({ messageId: 'messageId' })
const data = {
email: 'test@email.com',
formMessage: 'test msg',
name: 'test name',
to: 'test2@email.com',
to: ['test2@email.com'],
subject: 'test subject',
payloadTitle: 'test title'
}
await nodemailer.sendEmail(data)
assert(false, 'Unexpected result')
const info = await uut.sendEmail(data)
assert.isObject(info)
assert.isString(info.messageId)
} catch (err) {
assert.include(err.message, 'Property \'subject\' must be a string!')
assert(false, 'Unexpected result')
}
}) */
})
})
describe('validateEmailArray()', () => {
it('should throw error if email list is not provided ', async () => {
try {
await nodemailer.validateEmailArray()
await uut.validateEmailArray()
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'emailList\' must be a array!')
@@ -137,7 +170,7 @@ describe('NodeMailer', () => {
it('should throw error if email list is empty', async () => {
try {
const emailList = []
await nodemailer.validateEmailArray(emailList)
await uut.validateEmailArray(emailList)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Property \'emailList\' cant be empty!')
@@ -149,7 +182,7 @@ describe('NodeMailer', () => {
'wrongEmail',
'bad format'
]
await nodemailer.validateEmailArray(emailList)
await uut.validateEmailArray(emailList)
assert(false, 'Unexpected result')
} catch (err) {
assert.include(err.message, 'Array must contain emails format!')
@@ -161,7 +194,7 @@ describe('NodeMailer', () => {
'test@email.com',
'simple@email.com'
]
const result = await nodemailer.validateEmailArray(emailList)
const result = await uut.validateEmailArray(emailList)
assert.isTrue(result)
} catch (err) {
assert(false, 'Unexpected result')