diff --git a/.jshintrc b/.jshintrc index 2d96cd9..51bd36f 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,6 +1,7 @@ { "node" : true, "es3" : false, + "esnext" : true, "strict" : true, "curly" : true, "eqeqeq" : true, diff --git a/lib/Promise.js b/lib/Promise.js new file mode 100644 index 0000000..7bf5c2c --- /dev/null +++ b/lib/Promise.js @@ -0,0 +1,31 @@ +'use strict'; + +/** + * asCallback method mimics bluebird and allows + * promise object to handle an optional nodeback + * + * @param cb {Function} + * @return Promise + * + * @example + * function eitherOr(options, callback) { + * return promiseThingy(options).asCallback(callback); + * } + */ +Promise.prototype.asCallback = function(cb) { + if (typeof cb !== 'function') { + cb = noop; + } + + return this.then((result) => { + cb(null, result); + return this; + }).catch((err) => { + cb(err); + return this; + }); +}; + +function noop() {} + +module.exports = Promise; diff --git a/lib/inboundDomains.js b/lib/inboundDomains.js index 56e27c3..b9d4937 100644 --- a/lib/inboundDomains.js +++ b/lib/inboundDomains.js @@ -1,6 +1,8 @@ 'use strict'; -var api = 'inbound-domains'; +var api = 'inbound-domains' + /* global -Promise */ + , Promise = require('./Promise'); module.exports = function(client) { var inboundDomains = { @@ -8,7 +10,7 @@ module.exports = function(client) { var options = { uri: api }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, find: function(domain, callback) { if(typeof domain === 'function') { @@ -17,14 +19,13 @@ module.exports = function(client) { } if(!domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var options = { uri: api + '/' + domain }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, create: function(domain, callback) { if(typeof domain === 'function') { @@ -33,8 +34,7 @@ module.exports = function(client) { } if(!domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var options = { @@ -43,7 +43,7 @@ module.exports = function(client) { domain: domain } }; - client.post(options, callback); + return client.post(options, callback).asCallback(callback); }, delete: function(domain, callback) { if (typeof domain === 'function') { @@ -52,14 +52,13 @@ module.exports = function(client) { } if (!domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var options = { uri: api + '/' + domain }; - client.delete(options, callback); + return client.delete(options).asCallback(callback); } }; diff --git a/lib/messageEvents.js b/lib/messageEvents.js index e46f763..93cd40e 100644 --- a/lib/messageEvents.js +++ b/lib/messageEvents.js @@ -31,7 +31,7 @@ module.exports = function (client) { uri: api , qs: parameters }; - client.get(options, callback); + return client.get(options).asCallback(callback); } }; }; diff --git a/lib/recipientLists.js b/lib/recipientLists.js index cfa80e4..4904822 100644 --- a/lib/recipientLists.js +++ b/lib/recipientLists.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'recipient-lists' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); module.exports = function(client) { @@ -9,14 +11,13 @@ module.exports = function(client) { var reqOpts = { uri: api }; - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, find: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('id is required')); - return; + return Promise.reject(new Error('id is required')).asCallback(callback); } var reqOpts = { @@ -28,14 +29,13 @@ module.exports = function(client) { reqOpts.qs.show_recipients = options.show_recipients; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, create: function(options, callback) { options = options || {}; if(!options.recipients) { - callback(new Error('recipients list is required')); - return; + return Promise.reject(new Error('recipients list is required')).asCallback(callback); } var reqOpts = { @@ -50,14 +50,13 @@ module.exports = function(client) { reqOpts.json = toApiFormat(options); - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, update: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('recipients list id is required')); - return; + return Promise.reject(new Error('recipients list id is required')).asCallback(callback); } var reqOpts = { @@ -72,25 +71,23 @@ module.exports = function(client) { reqOpts.json = toApiFormat(options); - client.put(reqOpts, callback); - } - }; + return client.put(reqOpts, callback).asCallback(callback); + }, + delete: function(id, callback) { + if (typeof id === 'function') { + callback = id; + id = null; + } - recipientLists['delete'] = function(id, callback) { - if (typeof id === 'function') { - callback = id; - id = null; - } + if (!id) { + return Promise.reject(new Error('id is required')).asCallback(callback); + } - if (!id) { - callback(new Error('id is required')); - return; + var reqOpts = { + uri: api + '/' + id + }; + return client.delete(reqOpts).asCallback(callback); } - - var reqOpts = { - uri: api + '/' + id - }; - client['delete'](reqOpts, callback); }; return recipientLists; diff --git a/lib/relayWebhooks.js b/lib/relayWebhooks.js index dc22bce..b825286 100644 --- a/lib/relayWebhooks.js +++ b/lib/relayWebhooks.js @@ -1,6 +1,8 @@ 'use strict'; -var api = 'relay-webhooks'; +var api = 'relay-webhooks' + /* global -Promise */ + , Promise = require('./Promise'); var toApiFormat = function(input) { var model = { @@ -23,7 +25,7 @@ module.exports = function(client) { var reqOpts = { uri: api }; - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, find: function(relayWebhookId, callback) { if(typeof relayWebhookId === 'function') { @@ -32,14 +34,13 @@ module.exports = function(client) { } if(!relayWebhookId) { - callback(new Error('relayWebhookId is required')); - return; + return Promise.reject(new Error('relayWebhookId is required')).asCallback(callback); } var options = { uri: api + '/' + relayWebhookId }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, create: function(options, callback) { if(typeof options === 'function') { @@ -48,25 +49,22 @@ module.exports = function(client) { } if(!options) { - callback(new Error('options are required')); - return; + return Promise.reject(new Error('options are required')).asCallback(callback); } if(!options.target) { - callback(new Error('target is required in options')); - return; + return Promise.reject(new Error('target is required in options')).asCallback(callback); } if(!options.domain) { - callback(new Error('domain is required in options')); - return; + return Promise.reject(new Error('domain is required in options')).asCallback(callback); } var reqOpts = { uri: api , json: toApiFormat(options) }; - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, update: function(options, callback) { if(typeof options === 'function') { @@ -75,13 +73,11 @@ module.exports = function(client) { } if(!options) { - callback(new Error('options are required')); - return; + return Promise.reject(new Error('options are required')).asCallback(callback); } if(!options.relayWebhookId) { - callback(new Error('relayWebhookId is required in options')); - return; + return Promise.reject(new Error('relayWebhookId is required in options')).asCallback(callback); } var relayWebhookId = options.relayWebhookId; @@ -89,7 +85,7 @@ module.exports = function(client) { uri: api + '/' + relayWebhookId , json: toApiFormat(options) }; - client.put(reqOpts, callback); + return client.put(reqOpts).asCallback(callback); }, delete: function(relayWebhookId, callback) { if (typeof relayWebhookId === 'function') { @@ -98,15 +94,14 @@ module.exports = function(client) { } if (!relayWebhookId) { - callback(new Error('relayWebhookId is required')); - return; + return Promise.reject(new Error('relayWebhookId is required')).asCallback(callback); } var options = { uri: api + '/' + relayWebhookId }; - client.delete(options, callback); + client.delete(options, callback).asCallback(callback); } }; diff --git a/lib/sendingDomains.js b/lib/sendingDomains.js index b85e357..b335508 100644 --- a/lib/sendingDomains.js +++ b/lib/sendingDomains.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'sending-domains' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); /* @@ -19,7 +21,7 @@ module.exports = function (client) { var options = { uri: api }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, find: function (domain, callback) { //retrieve if(typeof domain === 'function') { @@ -28,14 +30,13 @@ module.exports = function (client) { } if(!domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var options = { uri: api + '/' + domain }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, create: function (domainBody, callback) { if(typeof domainBody === 'function') { @@ -44,20 +45,18 @@ module.exports = function (client) { } if(!domainBody) { - callback(new Error('domainBody is required')); - return; + return Promise.reject(new Error('domainBody is required')).asCallback(callback); } if(!domainBody.domain) { - callback(new Error('domain is required in the domainBody')); - return; + return Promise.reject(new Error('domain is required in the domainBody')).asCallback(callback); } var options = { uri: api , json: toApiFormat(domainBody) }; - client.post(options, callback); + return client.post(options).asCallback(callback); }, update: function (domainBody, callback) { if(typeof domainBody === 'function') { @@ -66,13 +65,11 @@ module.exports = function (client) { } if(!domainBody) { - callback(new Error('domainBody is required')); - return; + return Promise.reject(new Error('domainBody is required')).asCallback(callback); } if(!domainBody.domain) { - callback(new Error('domain is required in the domainBody')); - return; + return Promise.reject(new Error('domain is required in the domainBody')).asCallback(callback); } var obj = toApiFormat(domainBody); @@ -80,7 +77,7 @@ module.exports = function (client) { uri: api + '/' + obj.domain , json: toApiFormat(domainBody) }; - client.put(options, callback); + return client.put(options).asCallback(callback); }, delete: function(domain, callback) { if (typeof domain === 'function') { @@ -89,21 +86,19 @@ module.exports = function (client) { } if (!domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var options = { uri: api + '/' + domain }; - client.delete(options, callback); + return client.delete(options).asCallback(callback); }, verify: function (options, callback) { options = options || {}; if(!options.domain) { - callback(new Error('domain is required')); - return; + return Promise.reject(new Error('domain is required')).asCallback(callback); } var reqOpts = { @@ -114,7 +109,7 @@ module.exports = function (client) { } }; - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); } }; diff --git a/lib/sparkpost.js b/lib/sparkpost.js index 7745169..41e9c7d 100644 --- a/lib/sparkpost.js +++ b/lib/sparkpost.js @@ -2,6 +2,8 @@ var version = require( '../package.json').version , url = require('url') + /* global -Promise */ + , Promise = require('./Promise') , request = require( 'request') , _ = require( 'lodash' ); @@ -106,45 +108,47 @@ SparkPost.prototype.request = function( options, callback ) { options.gzip = true; } - request(options, function(err, res, body) { - var invalidCodeRegex = /(5|4)[0-9]{2}/; - if(err) { - return callback(err, res); - } else if(invalidCodeRegex.test(res.statusCode)) { - err = createSparkPostError(res, body); - return callback(err, res); - } else { - var response = body.results || body; - if(options.debug) { - response.debug = res; + return new Promise(function(resolve, reject) { + request(options, function (err, res, body) { + var invalidCodeRegex = /(5|4)[0-9]{2}/; + if (err) { + reject(err); + } else if (invalidCodeRegex.test(res.statusCode)) { + err = createSparkPostError(res, body); + reject(err); + } else { + var response = body.results || body; + if (options.debug) { + response.debug = res; + } + resolve(response); } - return callback(null, response); - } - }); + }); + }).asCallback(callback); }; SparkPost.prototype.get = function( options, callback ) { options.method = 'GET'; - this.request(options, callback); + return this.request(options).asCallback(callback); }; SparkPost.prototype.post = function( options, callback ) { options.method = 'POST'; - this.request(options, callback); + return this.request(options).asCallback(callback); }; SparkPost.prototype.put = function( options, callback ) { options.method = 'PUT'; - this.request(options, callback); + return this.request(options).asCallback(callback); }; SparkPost.prototype['delete'] = function( options, callback ) { options.method = 'DELETE'; - this.request(options, callback); + return this.request(options).asCallback(callback); }; SparkPost.SendGridCompatibility = require('./SendGridCompatibility'); diff --git a/lib/subaccounts.js b/lib/subaccounts.js index 85de232..f12984d 100644 --- a/lib/subaccounts.js +++ b/lib/subaccounts.js @@ -1,6 +1,8 @@ 'use strict'; -var api = 'subaccounts'; +var api = 'subaccounts' + /* global -Promise */ + , Promise = require('./Promise'); var toApiFormat = function(input) { var model = {}; @@ -47,7 +49,7 @@ module.exports = function(client) { var options = { uri: api }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, find: function(subaccountId, callback) { if(typeof subaccountId === 'function') { @@ -56,14 +58,13 @@ module.exports = function(client) { } if (!subaccountId) { - callback(new Error('subaccountId is required')); - return; + return Promise.reject(new Error('subaccountId is required')).asCallback(callback); } var options = { uri: api + '/' + subaccountId }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, create: function(options, callback) { if(typeof options === 'function') { @@ -72,21 +73,19 @@ module.exports = function(client) { } if (!options) { - callback(new Error('options are required')); - return; + return Promise.reject(new Error('options are required')).asCallback(callback); } var validation = validateCreateOptions(options); if (validation) { - callback(new Error(validation + ' in options')); - return; + return Promise.reject(new Error(validation + ' in options')).asCallback(callback); } var reqOpts = { uri: api, json: toApiFormat(options) }; - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, update: function(options, callback) { if(typeof options === 'function') { @@ -95,13 +94,11 @@ module.exports = function(client) { } if(!options) { - callback(new Error('options are required')); - return; + return Promise.reject(new Error('options are required')).asCallback(callback); } if(!options.subaccountId) { - callback(new Error('subaccountId is required in options')); - return; + return Promise.reject(new Error('subaccountId is required in options')).asCallback(callback); } var subaccountId = options.subaccountId; @@ -109,7 +106,7 @@ module.exports = function(client) { uri: api + '/' + subaccountId, json: toApiFormat(options) }; - client.put(reqOpts, callback); + return client.put(reqOpts).asCallback(callback); } }; diff --git a/lib/suppressionList.js b/lib/suppressionList.js index aa130a9..444dbeb 100644 --- a/lib/suppressionList.js +++ b/lib/suppressionList.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'suppression-list' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); module.exports = function(client) { @@ -11,7 +13,7 @@ module.exports = function(client) { uri: api , qs: parameters }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, checkStatus: function(email, callback) { if(typeof email === 'function') { @@ -20,14 +22,13 @@ module.exports = function(client) { } if(!email) { - callback(new Error('email is required')); - return; + return Promise.reject(new Error('email is required')).asCallback(callback); } var options = { uri: api + '/' + email }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, removeStatus: function(email, callback) { if(typeof email === 'function') { @@ -36,14 +37,13 @@ module.exports = function(client) { } if(!email) { - callback(new Error('email is required')); - return; + return Promise.reject(new Error('email is required')).asCallback(callback); } var options = { uri: api + '/' + email }; - client['delete'](options, callback); + return client.delete(options).asCallback(callback); }, upsert: function(recipients, callback) { var options; @@ -54,8 +54,7 @@ module.exports = function(client) { } if(!recipients) { - callback(new Error('recipient is required')); - return; + return Promise.reject(new Error('recipient is required')).asCallback(callback); } if(!Array.isArray(recipients)) { @@ -68,7 +67,7 @@ module.exports = function(client) { json: { recipients: recipients } }; - client.put(options, callback); + return client.put(options, callback).asCallback(callback); } }; diff --git a/lib/templates.js b/lib/templates.js index b80dbe3..b7ee06e 100644 --- a/lib/templates.js +++ b/lib/templates.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'templates' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); module.exports = function(client) { @@ -9,14 +11,13 @@ module.exports = function(client) { var options = { uri: api }; - client.get(options, callback); + return client.get(options).asCallback(callback); }, find: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('template id is required')); - return; + return Promise.reject(new Error('template id is required')).asCallback(callback); } var reqOpts = { @@ -28,14 +29,13 @@ module.exports = function(client) { reqOpts.qs.draft = options.draft; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, create: function(options, callback) { options = options || {}; if (!options.template) { - callback(new Error('template object is required')); - return; + return Promise.reject(new Error('template object is required')).asCallback(callback); } var reqOpts = { @@ -43,14 +43,13 @@ module.exports = function(client) { , json: toApiFormat(options.template) }; - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, update: function(options, callback) { options = options || {}; if(!options.template) { - callback(new Error('template object is required')); - return; + return Promise.reject(new Error('template object is required')).asCallback(callback); } var object = toApiFormat(options.template) @@ -64,14 +63,28 @@ module.exports = function(client) { reqOpts.qs.update_published = options.update_published; } - client.put(reqOpts, callback); + return client.put(reqOpts).asCallback(callback); + }, + delete: function(id, callback) { + if (typeof id === 'function') { + callback = id; + id = null; + } + + if (!id) { + return Promise.reject(new Error('template id is required')).asCallback(callback); + } + + var options = { + uri: api + '/' + id + }; + return client.delete(options).asCallback(callback); }, preview: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('template id is required')); - return; + return Promise.reject(new Error('template id is required')).asCallback(callback); } var reqOpts = { @@ -86,26 +99,9 @@ module.exports = function(client) { reqOpts.qs.draft = options.draft; } - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); } }; - templates['delete'] = function(id, callback) { - if (typeof id === 'function') { - callback = id; - id = null; - } - - if (!id) { - callback(new Error('template id is required')); - return; - } - - var options = { - uri: api + '/' + id - }; - client['delete'](options, callback); - }; - return templates; }; diff --git a/lib/transmissions.js b/lib/transmissions.js index b7317ec..5c99dcb 100644 --- a/lib/transmissions.js +++ b/lib/transmissions.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'transmissions' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); /* @@ -15,8 +17,7 @@ module.exports = function(client) { options = options || {}; if(!options.transmissionBody) { - callback(new Error('transmissionBody is required')); - return; + return Promise.reject(new Error('transmissionBody is required')).asCallback(callback); } var mappedInput = toApiFormat(options.transmissionBody); @@ -32,7 +33,7 @@ module.exports = function(client) { delete options.num_rcpt_errors; } - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, all: function (options, callback) { if(typeof options === 'function') { @@ -53,7 +54,7 @@ module.exports = function(client) { reqOpts.qs.template_id = options.template_id; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, find: function (transmissionID, callback) { var options = { @@ -66,11 +67,10 @@ module.exports = function(client) { } if(!transmissionID) { - callback(new Error('transmissionID is required')); - return; + return Promise.reject(new Error('transmissionID is required')).asCallback(callback); } - client.get(options, callback); + return client.get(options).asCallback(callback); } }; diff --git a/lib/webhooks.js b/lib/webhooks.js index 852f695..a35354c 100644 --- a/lib/webhooks.js +++ b/lib/webhooks.js @@ -1,6 +1,8 @@ 'use strict'; var api = 'webhooks' + /* global -Promise */ + , Promise = require('./Promise') , toApiFormat = require('./toApiFormat'); module.exports = function(client) { @@ -20,14 +22,13 @@ module.exports = function(client) { reqOpts.qs.timezone = options.timezone; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, describe: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('id is required')); - return; + return Promise.reject(new Error('id is required')).asCallback(callback); } var reqOpts = { uri: api + '/' + options.id @@ -38,7 +39,7 @@ module.exports = function(client) { reqOpts.qs.timezone = options.timezone; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, create: function(webhook, callback) { if(typeof webhook === 'function') { @@ -47,15 +48,14 @@ module.exports = function(client) { } if(!webhook) { - callback(new Error('webhook object is required')); - return; + return Promise.reject(new Error('webhook object is required')).asCallback(callback); } var options = { uri: api , json: toApiFormat(webhook) }; - client.post(options, callback); + return client.post(options).asCallback(callback); }, update: function(webhook, callback) { if(typeof webhook === 'function') { @@ -64,8 +64,7 @@ module.exports = function(client) { } if(!webhook) { - callback(new Error('webhook object is required')); - return; + return Promise.reject(new Error('webhook object is required')).asCallback(callback); } var object = toApiFormat(webhook) @@ -74,19 +73,33 @@ module.exports = function(client) { , json: object }; - client.put(options, callback); + return client.put(options).asCallback(callback); + }, + delete: function(id, callback) { + if (typeof id === 'function') { + callback = id; + id = null; + } + + if (!id) { + return Promise.reject(new Error('id is required')).asCallback(callback); + } + + var options = { + uri: api + '/' + id + }; + + return client.delete(options).asCallback(callback); }, validate: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('id is required')); - return; + return Promise.reject(new Error('id is required')).asCallback(callback); } if(!options.message) { - callback(new Error('message is required')); - return; + return Promise.reject(new Error('message is required')).asCallback(callback); } var reqOpts = { @@ -96,14 +109,13 @@ module.exports = function(client) { } }; - client.post(reqOpts, callback); + return client.post(reqOpts).asCallback(callback); }, getBatchStatus: function(options, callback) { options = options || {}; if(!options.id) { - callback(new Error('id is required')); - return; + return Promise.reject(new Error('id is required')).asCallback(callback); } var reqOpts = { @@ -115,13 +127,13 @@ module.exports = function(client) { reqOpts.qs.limit = options.limit; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, getDocumentation: function(callback) { var reqOpts = { uri: api + '/events/documentation' }; - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); }, getSamples: function(options, callback){ var reqOpts = { @@ -138,27 +150,9 @@ module.exports = function(client) { reqOpts.qs.events = options.events; } - client.get(reqOpts, callback); + return client.get(reqOpts).asCallback(callback); } }; - webhooks['delete'] = function(id, callback) { - if (typeof id === 'function') { - callback = id; - id = null; - } - - if (!id) { - callback(new Error('id is required')); - return; - } - - var options = { - uri: api + '/' + id - }; - - client['delete'](options, callback); - }; - return webhooks; }; diff --git a/package.json b/package.json index 4230f4e..4dd7f0f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "url": "https://github.com/SparkPost/node-sparkpost" }, "author": "Message Systems, Inc.", - "license": "Apache 2.0", + "license": "Apache-2.0", "bugs": { "url": "https://github.com/SparkPost/node-sparkpost/issues" }, @@ -42,6 +42,6 @@ "dependencies": { "json-pointer": "^0.5.0", "lodash": "^4.13.1", - "request": "^2.72.0" + "request": "^2.74.0" } } diff --git a/test/spec/inboundDomains.spec.js b/test/spec/inboundDomains.spec.js index b80e111..a6a0c40 100644 --- a/test/spec/inboundDomains.spec.js +++ b/test/spec/inboundDomains.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,9 @@ describe('Inbound Domains Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - delete: sinon.stub().yields() - + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; inboundDomains = require('../../lib/inboundDomains')(client); diff --git a/test/spec/messageEvents.spec.js b/test/spec/messageEvents.spec.js index e26aee9..af3f0a5 100644 --- a/test/spec/messageEvents.spec.js +++ b/test/spec/messageEvents.spec.js @@ -1,16 +1,18 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); describe('Message Events Library', function() { - var client, templates; + var client; beforeEach(function() { client = { - get: sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})) }; messageEvents = require('../../lib/messageEvents')(client); diff --git a/test/spec/recipientLists.spec.js b/test/spec/recipientLists.spec.js index 670c2be..6c493fd 100644 --- a/test/spec/recipientLists.spec.js +++ b/test/spec/recipientLists.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Recipient Lists Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - 'delete': sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; recipientLists = require('../../lib/recipientLists')(client); diff --git a/test/spec/relayWebhooks.spec.js b/test/spec/relayWebhooks.spec.js index ea2991f..98d5f19 100644 --- a/test/spec/relayWebhooks.spec.js +++ b/test/spec/relayWebhooks.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Relay Webhooks Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - delete: sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; relayWebhooks = require('../../lib/relayWebhooks')(client); diff --git a/test/spec/sendingDomains.spec.js b/test/spec/sendingDomains.spec.js index 512bc70..a348fff 100644 --- a/test/spec/sendingDomains.spec.js +++ b/test/spec/sendingDomains.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Sending Domains Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - delete: sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; sendingDomains = require('../../lib/sendingDomains')(client); @@ -21,7 +23,7 @@ describe('Sending Domains Library', function() { describe('all Method', function() { it('should call client get method with the appropriate uri', function(done) { - sendingDomains.all(function() { + sendingDomains.all().then(function() { expect(client.get.firstCall.args[0]).to.deep.equal({uri:'sending-domains'}); done(); }); @@ -30,14 +32,14 @@ describe('Sending Domains Library', function() { describe('find Method', function() { it('should call client get method with the appropriate uri', function(done) { - sendingDomains.find('test', function() { + sendingDomains.find('test').then(function() { expect(client.get.firstCall.args[0]).to.deep.equal({uri: 'sending-domains/test'}); done(); }); }); it('should throw an error if domain is null', function(done) { - sendingDomains.find(null, function(err) { + sendingDomains.find(null).catch(function(err) { expect(err.message).to.equal('domain is required'); expect(client.get).not.to.have.been.called; done(); @@ -59,7 +61,7 @@ describe('Sending Domains Library', function() { domain: "test" }; - sendingDomains.create(domainBody, function(err, data) { + sendingDomains.create(domainBody).then(function(data) { expect(client.post.firstCall.args[0].uri).to.equal('sending-domains'); done(); }); diff --git a/test/spec/sparkpost.spec.js b/test/spec/sparkpost.spec.js index 17bb521..019fa37 100644 --- a/test/spec/sparkpost.spec.js +++ b/test/spec/sparkpost.spec.js @@ -140,11 +140,8 @@ describe('SparkPost Library', function() { }; client.request(options, function(err, data) { - expect(data).to.be.defined; expect(err).to.be.defined; - expect(err.errors).to.deep.equal(data.body.errors); - // finish async test done(); }); diff --git a/test/spec/subaccounts.spec.js b/test/spec/subaccounts.spec.js index d36d873..d74f80b 100644 --- a/test/spec/subaccounts.spec.js +++ b/test/spec/subaccounts.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,9 +12,9 @@ describe('Subaccounts Library', function () { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})) }; subaccounts = require('../../lib/subaccounts')(client); diff --git a/test/spec/suppressionList.spec.js b/test/spec/suppressionList.spec.js index a661f11..b993800 100644 --- a/test/spec/suppressionList.spec.js +++ b/test/spec/suppressionList.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Suppression List Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - 'delete': sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; suppressionList = require('../../lib/suppressionList')(client); diff --git a/test/spec/templates.spec.js b/test/spec/templates.spec.js index 4043f2c..41d8a5a 100644 --- a/test/spec/templates.spec.js +++ b/test/spec/templates.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Templates Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - 'delete': sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; templates = require('../../lib/templates')(client); diff --git a/test/spec/transmissions.spec.js b/test/spec/transmissions.spec.js index bbe50e3..3d436e4 100644 --- a/test/spec/transmissions.spec.js +++ b/test/spec/transmissions.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,8 +12,8 @@ describe('Transmissions Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})) }; transmission = require('../../lib/transmissions')(client); diff --git a/test/spec/webhooks.spec.js b/test/spec/webhooks.spec.js index c5b5a40..777edeb 100644 --- a/test/spec/webhooks.spec.js +++ b/test/spec/webhooks.spec.js @@ -1,7 +1,9 @@ var chai = require('chai') , expect = chai.expect , sinon = require('sinon') - , sinonChai = require('sinon-chai'); + , sinonChai = require('sinon-chai') + /* global -Promise */ + , Promise = require('../../lib/Promise'); chai.use(sinonChai); @@ -10,10 +12,10 @@ describe('Webhooks Library', function() { beforeEach(function() { client = { - get: sinon.stub().yields(), - post: sinon.stub().yields(), - put: sinon.stub().yields(), - 'delete': sinon.stub().yields() + get: sinon.stub().returns(Promise.resolve({})), + post: sinon.stub().returns(Promise.resolve({})), + put: sinon.stub().returns(Promise.resolve({})), + delete: sinon.stub().returns(Promise.resolve({})) }; webhooks = require('../../lib/webhooks')(client);