Sms integration fix (#130)

* Twilio integration error handling improvement

* Mock-sms error triggering added
This commit is contained in:
Fabio Cigliano 2018-06-19 22:42:51 +12:00 committed by Josh Harvey
parent 9d6f3e6d9b
commit dd7e447e73
3 changed files with 31 additions and 19 deletions

View file

@ -1,29 +1,30 @@
require('es6-promise').polyfill() require('es6-promise').polyfill()
var config = require('../lib/config') var config = require('../lib/settings-loader')
var plugins = require('../lib/plugins') var sms = require('../lib/sms')
var rand = Math.floor(Math.random() * 1e6) var rand = Math.floor(Math.random() * 1e6)
var db = config.connection
var rec = { var rec = {
email: { email: {
subject: 'Test email ' + rand, subject: 'Test email ' + rand,
body: 'This is a test email from lamassu-server' body: 'This is a test email from lamassu-server'
}, },
sms: { sms: {
toNumber: '666',
body: '[Lamassu] This is a test sms ' + rand body: '[Lamassu] This is a test sms ' + rand
} }
} }
var db = config.connection config.loadLatest(db)
config.loadConfig(db)
.then(function (config) { .then(function (config) {
plugins.configure(config) sms.sendMessage(config, rec)
plugins.sendMessage(rec)
.then(function () { .then(function () {
console.log('Success.') console.log('Success.')
process.exit(0)
}) })
.catch(function (err) { .catch(function (err) {
console.log(err.stack) console.log(err.stack)
process.exit(1)
}) })
}) })

View file

@ -1,8 +1,14 @@
const _ = require('lodash/fp')
exports.NAME = 'MockSMS' exports.NAME = 'MockSMS'
exports.sendMessage = function sendMessage (account, rec) { exports.sendMessage = function sendMessage (account, rec) {
console.log('Sending SMS: %j', rec) console.log('Sending SMS: %j', rec)
return new Promise(resolve => { return new Promise((resolve, reject) => {
setTimeout(resolve, 10) if (_.endsWith('666', _.getOr(false, 'sms.toNumber', rec))) {
reject(new Error(`${exports.NAME} mocked error!`))
} else {
setTimeout(resolve, 10)
}
}) })
} }

View file

@ -7,17 +7,22 @@ const BAD_NUMBER_CODES = [21201, 21202, 21211, 21214, 21216, 21217, 21219, 21408
21610, 21612, 21614, 21608] 21610, 21612, 21614, 21608]
function sendMessage (account, rec) { function sendMessage (account, rec) {
const client = twilio(account.accountSid, account.authToken) return Promise.resolve()
const body = rec.sms.body .then(() => {
const _toNumber = rec.sms.toNumber || account.toNumber // to catch configuration errors like
// "Error: username is required"
const client = twilio(account.accountSid, account.authToken)
const body = rec.sms.body
const _toNumber = rec.sms.toNumber || account.toNumber
const opts = { const opts = {
body: body, body: body,
to: _toNumber, to: _toNumber,
from: account.fromNumber from: account.fromNumber
} }
return client.messages.create(opts) return client.messages.create(opts)
})
.catch(err => { .catch(err => {
if (_.includes(err.code, BAD_NUMBER_CODES)) { if (_.includes(err.code, BAD_NUMBER_CODES)) {
const badNumberError = new Error(err.message) const badNumberError = new Error(err.message)
@ -25,7 +30,7 @@ function sendMessage (account, rec) {
throw badNumberError throw badNumberError
} }
throw new Error(err.message) throw new Error(`Twilio error: ${err.message}`)
}) })
} }