linagora-rse
Version:
199 lines (170 loc) • 6.71 kB
JavaScript
;
var expect = require('chai').expect;
var request = require('supertest');
describe('linagora.esn.messaging.email module', function() {
var moduleName = 'linagora.esn.messaging.email';
var createToken = function(message, user, callback) {
var EmailRecipientToken = require('mongoose').model('EmailRecipientToken');
new EmailRecipientToken({
user: user,
message: {
id: message._id,
objectType: message.objectType
}
}).save(callback);
};
beforeEach(function(done) {
var self = this;
this.helpers.modules.initMidway(moduleName, function(err) {
if (err) {
return done(err);
}
self.helpers.api.applyDomainDeployment(
'linagora_EMAILReply',
{
fixtures: __dirname + '/../fixtures/deployments'
},
function(err, models) {
if (err) {
return done(err);
}
self.models = models;
return done();
}
);
});
});
afterEach(function(done) {
this.helpers.api.cleanDomainDeployment(this.models, done);
});
describe('POST /api/messages/email/reply', function() {
beforeEach(function() {
var app = require('../../backend/webserver/application')(this.helpers.modules.current.lib, this.helpers.modules.current.deps);
this.app = this.helpers.modules.getWebServer(app);
});
it('should send back 404 if x-esn-email-to-reply-from is not a registered user', function(done) {
var req = request(this.app).post('/api/messages/email/reply');
req.set('x-esn-email-to-reply-to', 'to@bar.com');
req.set('x-esn-email-to-reply-from', 'from@bar.com');
req.set('Content-Type', 'message/rfc822');
req.send('123');
req.expect(404);
req.end(function(err) {
expect(err).to.not.exist;
done();
});
});
it('should send back 403 if the user can not reply to the message', function(done) {
var self = this;
this.helpers.api.createMessage('whatsup', 'This is the message content', self.models.users[1], [self.models.communities[0].activity_stream.uuid], function(err, message) {
if (err) {
return done(err);
}
createToken(message, self.models.users[2], function(err, emailtoken) {
if (err) {
return done(err);
}
if (!emailtoken) {
return done(new Error());
}
var req = request(self.app).post('/api/messages/email/reply');
req.set('Content-Type', 'message/rfc822');
req.set('x-esn-email-to-reply-to', emailtoken.token + '@open-paas.org');
req.set('x-esn-email-to-reply-from', self.models.users[2].emails[0]);
req.send('123');
req.expect(403);
req.end(function(err) {
expect(err).to.not.exist;
done();
});
});
});
});
it('should send back 201 when reply is ok', function(done) {
var self = this;
this.helpers.api.createMessage('whatsup', 'This is the message content', self.models.users[1], [self.models.communities[0].activity_stream.uuid], function(err, message) {
if (err) {
return done(err);
}
createToken(message, self.models.users[1], function(err, emailtoken) {
if (err) {
return done(err);
}
if (!emailtoken) {
return done(new Error());
}
var fs = require('fs');
var file = __dirname + '/../fixtures/mail.eml';
var email = fs.readFileSync(file, 'utf8');
var req = request(self.app).post('/api/messages/email/reply');
req.set('Content-Type', 'message/rfc822');
req.set('x-esn-email-to-reply-to', emailtoken.token + '@open-paas.org');
req.set('x-esn-email-to-reply-from', self.models.users[1].emails[0]);
req.send(email);
req.expect(201);
req.end(function(err, res) {
expect(err).to.not.exist;
expect(res.body.parentId).to.exist;
expect(res.body.parentId).to.equal(message.id);
self.helpers.api.loadMessage(message._id, function(err, message) {
if (err) {
return done(err);
}
expect(message.responses.length).to.equal(1);
var response = message.responses[0];
expect(response.content).to.equal('Hi guys,\n\nCheck this out!');
done();
});
});
});
});
});
it('should save the attachments in the reply and send back 201', function(done) {
var self = this;
this.helpers.api.createMessage('whatsup', 'This is the message content, please send me the awesome file', self.models.users[1], [self.models.communities[0].activity_stream.uuid], function(err, message) {
if (err) {
return done(err);
}
createToken(message, self.models.users[1], function(err, emailtoken) {
if (err) {
return done(err);
}
if (!emailtoken) {
return done(new Error());
}
var fs = require('fs');
var file = __dirname + '/../fixtures/mail_with_attachments.eml';
var email = fs.readFileSync(file, 'utf8');
var req = request(self.app).post('/api/messages/email/reply');
req.set('Content-Type', 'message/rfc822');
req.set('x-esn-email-to-reply-to', emailtoken.token + '@open-paas.org');
req.set('x-esn-email-to-reply-from', self.models.users[1].emails[0]);
req.send(email);
req.expect(201);
req.end(function(err, res) {
expect(err).to.not.exist;
expect(res.body.parentId).to.exist;
expect(res.body.parentId).to.equal(message.id);
self.helpers.api.loadMessage(message._id, function(err, message) {
if (err) {
return done(err);
}
expect(message.responses.length).to.equal(1);
var response = message.responses[0];
expect(response.content).to.equal('OK looks nice, check the attached documents!\nCheers,\n');
expect(response.attachments.length).to.equal(2);
var attachments = 0;
response.attachments.forEach(function(attachment) {
if (attachment.name === 'popup.js' || attachment.name === 'bootswatch.less') {
attachments++;
}
});
expect(attachments).to.equal(2);
done();
});
});
});
});
});
});
});