UNPKG

ht-mailer

Version:

A hudson-taylor mailer service that keeps blacklists and a mail queue in mongoDB.

117 lines (100 loc) 3.79 kB
var assert = require('assert'); var mongodb = require('mongodb'); var ht = require('hudson-taylor'); var service = require('../lib/service'); describe("ht-mailer", function() { var db, client, testBucket = []; before(function(done){ var config = require('../config/test'); mongodb.MongoClient.connect(config['ht-mailer'].mongoURI, function(err, database) { if(err) throw err; db = database; client = new ht.Services(); client.connect("mail", new ht.LocalClient("mail", service.setup, config, db, testBucket)); done(); }); }); after(function(done){ db.dropDatabase(done); }); it("should queue emails to send", function(done) { var testEmail = { to : ['mel@example.com'], from : 'bev@example.com', subject : 'Test email {{number}}', text : 'Heya {{name}}, can we meet up at {{date}}?', data : {number : 123, date : new Date(), name : 'Melanie'} } client.remote('mail', 'queue', testEmail, function(err, res) { if(err) throw err; assert.equal(res[0].subject, 'Test email 123'); done(); }); }); it("should directly send emails", function(done) { var testEmail = { to : ['mel@example.com'], from : 'bev@example.com', subject : 'Test email {{number}}', text : 'Heya {{name}}, can we meet up at {{date}}?', data : {number : 123, date : new Date(), name : 'Melanie'} } client.remote('mail', 'send', testEmail, function(err, res) { if(err) throw err; checkBucket(1, function(info) { assert.equal(info.envelope.from, 'bev@example.com'); done(); }); }); }); it("should load a template email", function(done) { var testEmail = { to : ['mel@example.com'], from : 'bev@example.com', subject : 'Test email {{number}}', template : 'test1', data : {number : 123, date : new Date(), name : 'Melanie'} } client.remote('mail', 'queue', testEmail, function(err, res) { if(err) throw err; assert.equal(res[0].subject, 'Test email 123'); done(); }); }); it("should deliver queued email", function(done) { var testEmail = { to : ['mel@example.com'], from : 'bev@example.com', subject : 'Test email {{number}}', template : 'test1', data : {number : 123, date : new Date(), name : 'Melanie'} } client.remote('mail', 'queue', testEmail, function(err, res) { if(err) throw err; checkBucket(2, function(info) { assert.equal(info.envelope.from, 'bev@example.com'); done(); }); }); }); it("should not deliver mail to a blacklisted account", function(done) { var testEmail = { to : ['mel@example.com'], from : 'bev@example.com', subject : 'Test email {{number}}', template : 'test1', data : {number : 123, date : new Date(), name : 'Melanie'} } client.remote('mail', 'blockEmail', {email : 'mel@example.com'}, function(err, res) { if(err) throw err; assert.equal(res.blocked, true); done(); }); }); function checkBucket(index, callback) { if(testBucket[index]) return callback(testBucket[index]); setTimeout(function(){checkBucket(index, callback);}, 200); } });