1 | var assert = require('assert');
|
2 |
|
3 | var util = require ('util');
|
4 | var path = require ('path');
|
5 |
|
6 | var nodemailer = require ('nodemailer');
|
7 |
|
8 | var baseName = path.basename (__filename, path.extname (__filename));
|
9 |
|
10 | var flow = require ("../flow");
|
11 |
|
12 | var tests = [];
|
13 |
|
14 |
|
15 |
|
16 | var config = require ("./008-email-task.json");
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | var verbose = false;
|
22 |
|
23 | describe (baseName + " running http initiator tests", function () {
|
24 |
|
25 |
|
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);
|
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 |
|
99 | initiator: config.initiator
|
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 |
|
126 | return;
|
127 |
|
128 | describe('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 | });
|