UNPKG

6.18 kBJavaScriptView Raw
1var assert = require('assert');
2
3var util = require ('util');
4var path = require ('path');
5
6var nodemailer = require ('nodemailer');
7
8var baseName = path.basename (__filename, path.extname (__filename));
9
10var flow = require ("../flow");
11
12var tests = [];
13
14//process.on('uncaughtException', failure ('unhadled exception'));
15
16var config = require ("./008-email-task.json");
17
18//var testOnly = "login-and-send";
19//var testOnly = "envelopes";
20
21var verbose = false;
22
23describe (baseName + " running http initiator tests", function () {
24
25 // this.timeout(10000);
26
27 var server;
28
29 beforeEach (function (done) {
30 return done();
31 if (process.version.indexOf ('v0.10') === 0) {
32 server = new simplesmtp.createServer({
33 ignoreTLS: true,
34 disableDNSValidation: true,
35 requireAuthentication: true,
36 debug: false,
37 authMethods: ['PLAIN', 'XOAUTH2']
38 });
39
40 server.on('startData', function(connection) {
41 connection.hash = crypto.createHash('md5');
42 });
43
44 server.on('data', function(connection, chunk) {
45 connection.hash.update(chunk.toString('utf-8'));
46 });
47
48 server.on('dataReady', function(connection, callback) {
49 var hash = connection.hash.digest('hex');
50 callback(null, hash); // ABC1 is the queue id to be advertised to the client
51 });
52
53 server.on('authorizeUser', function(connection, username, pass, callback) {
54 callback(null, username === 'testuser' && (pass === 'testpass' || pass === 'testtoken'));
55 });
56
57 server.on('validateSender', function(connection, email, callback) {
58 callback(!/@valid.sender/.test(email) && new Error('Invalid sender'));
59 });
60
61 server.on('validateRecipient', function(connection, email, callback) {
62 callback(!/@valid.recipient/.test(email) && new Error('Invalid recipient'));
63 });
64
65 server.listen(PORT_NUMBER, done);
66 }
67 });
68
69 afterEach (function (done) {
70 return done();
71 server.end(done);
72 });
73
74 Object.keys (config.tests).forEach (function (token) {
75 var item = config.tests[token];
76 var method = it;
77
78 if (typeof testOnly !== "undefined" && testOnly) {
79 if (testOnly === token) {
80 method = it.only;
81 verbose = true;
82 } else {
83 return;
84 }
85 }
86
87 if (item.skip) {
88 method = it.skip;
89 }
90
91 method (item.description ? item.description + ' ('+token+')' : token, function (done) {
92
93 var df = new flow ({
94 tasks: item.tasks,
95 templates: config.templates.task,
96 logger: verbose || "VERBOSE" in process.env ? undefined : function () {}
97 }, {
98 // dataflow parameters
99 initiator: config.initiator // for host name and port
100 });
101
102 if (!df.ready) {
103 console.log ("dataflow not ready");
104 assert (item.expect === "fail" ? true : false);
105 done ();
106 return;
107 }
108
109 df.on ('completed', function () {
110 assert (item.expect === "ok" ? true : false);
111 done ();
112 });
113
114 df.on ('failed', function () {
115 assert (item.expect === "fail" ? true : false);
116 done ();
117 });
118
119 if (item.autoRun || item.autoRun == void 0)
120 df.run();
121
122 });
123 });
124});
125
126return;
127
128describe('Nodemailer integration tests', function() {
129 this.timeout(10000);
130 var server;
131
132 it('should log in and send mail', function(done) {
133 var nm = nodemailer.createTransport({
134 host: 'localhost',
135 port: PORT_NUMBER,
136 auth: {
137 user: 'testuser',
138 pass: 'testpass'
139 },
140 ignoreTLS: true
141 });
142
143 var mailData = {
144 from: 'from@valid.sender',
145 sender: 'sender@valid.sender',
146 to: ['to1@valid.recipient', 'to2@valid.recipient', 'to@invalid.recipient'],
147 subject: 'test',
148 date: new Date('Mon, 31 Jan 2011 23:01:00 +0000'),
149 messageId: 'abc@def',
150 xMailer: 'aaa',
151 text: 'uuu'
152 };
153
154 nm.sendMail(mailData, function(err, info) {
155 expect(err).to.not.exist;
156 expect(info.accepted).to.deep.equal([
157 'to1@valid.recipient',
158 'to2@valid.recipient'
159 ]);
160 expect(info.rejected).to.deep.equal([
161 'to@invalid.recipient'
162 ]);
163 expect(info.messageId).to.equal('abc@def');
164 expect(/538ec1431ce376bc46f11b0f51849beb/i.test(info.response)).to.be.true;
165 done();
166 });
167 });
168
169 it('should response auth error', function(done) {
170 var nm = nodemailer.createTransport({
171 host: 'localhost',
172 port: PORT_NUMBER,
173 auth: {
174 user: 'invalid user',
175 pass: 'testpass'
176 },
177 ignoreTLS: true
178 });
179
180 var mailData = {
181 from: 'from@valid.sender',
182 to: ['to1@valid.recipient', 'to2@valid.recipient', 'to@invalid.recipient'],
183 subject: 'test',
184 date: new Date('Mon, 31 Jan 2011 23:01:00 +0000'),
185 messageId: 'abc@def',
186 xMailer: 'aaa',
187 text: 'uuu'
188 };
189
190 nm.sendMail(mailData, function(err, info) {
191 expect(err).to.exist;
192 expect(info).to.not.exist;
193 expect(err.code).to.equal('EAUTH');
194 done();
195 });
196 });
197
198 it('should response envelope error', function(done) {
199 var nm = nodemailer.createTransport({
200 host: 'localhost',
201 port: PORT_NUMBER,
202 auth: {
203 user: 'testuser',
204 pass: 'testpass'
205 },
206 ignoreTLS: true
207 });
208
209 var mailData = {
210 from: 'from@valid.sender',
211 to: ['to@invalid.recipient'],
212 subject: 'test',
213 date: new Date('Mon, 31 Jan 2011 23:01:00 +0000'),
214 messageId: 'abc@def',
215 xMailer: 'aaa',
216 text: 'uuu'
217 };
218
219 nm.sendMail(mailData, function(err, info) {
220 expect(err).to.exist;
221 expect(info).to.not.exist;
222 expect(err.code).to.equal('EENVELOPE');
223 done();
224 });
225 });
226
227 it('should override envelope', function(done) {
228 var nm = nodemailer.createTransport({
229 host: 'localhost',
230 port: PORT_NUMBER,
231 auth: {
232 user: 'testuser',
233 pass: 'testpass'
234 },
235 ignoreTLS: true
236 });
237
238 var mailData = {
239 from: 'from@valid.sender',
240 to: ['to1@valid.recipient', 'to2@valid.recipient', 'to@invalid.recipient'],
241 subject: 'test',
242 date: new Date('Mon, 31 Jan 2011 23:01:00 +0000'),
243 messageId: 'abc@def',
244 xMailer: 'aaa',
245 text: 'uuu',
246 envelope: {
247 from: 'aaa@valid.sender',
248 to: 'vvv@valid.recipient'
249 }
250 };
251
252 nm.sendMail(mailData, function(err, info) {
253 expect(err).to.not.exist;
254 expect(info.accepted).to.deep.equal([
255 'vvv@valid.recipient'
256 ]);
257 expect(info.rejected).to.deep.equal([]);
258 expect(info.messageId).to.equal('abc@def');
259 expect(/eaa13435e1401328be32bc7a4c629f9f/i.test(info.response)).to.be.true;
260 done();
261 });
262 });
263});