1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-23 09:22:23 -05:00
mail/test/integration/email-dao-test.js

422 lines
40 KiB
JavaScript
Raw Normal View History

define(function(require) {
'use strict';
2014-06-11 03:42:34 -04:00
var expect = chai.expect,
ImapClient = require('imap-client'),
BrowserCrow = require('browsercrow'),
BrowserSMTP = require('browsersmtp'),
SmtpClient = require('smtpclient'),
appController = require('js/app-controller'),
mailreader = require('mailreader'),
openpgp = require('openpgp'),
PgpMailer = require('pgpmailer');
describe('Email DAO integration tests', function() {
2014-06-11 03:42:34 -04:00
this.timeout(100000);
chai.Assertion.includeStack = true;
2014-06-11 03:42:34 -04:00
var emailDao, imapClient, imapMessages, imapFolders, imapServer, smtpServer, smtpClient, userStorage,
mockKeyPair;
2014-06-11 03:42:34 -04:00
var testAccount = {
user: 'safewithme.testuser@gmail.com',
pass: 'passphrase',
xoauth2: 'testtoken'
};
2014-06-11 03:42:34 -04:00
beforeEach(function(done) {
2014-06-11 03:42:34 -04:00
imapMessages = [{
raw: 'Message-id: <a>\r\nSubject: hello 1\r\n\r\nWorld 1!',
internaldate: '14-Sep-2013 21:22:28 -0300',
uid: 500
}, {
raw: 'Message-id: <b>\r\nSubject: hello 2\r\n\r\nWorld 2!',
flags: ['\\Seen'],
uid: 600
}, {
raw: 'Message-id: <c>\r\nSubject: hello 3\r\n\r\nWorld 3!'
}, {
raw: 'From: sender name <sender@example.com>\r\n' +
'To: Receiver name <receiver@example.com>\r\n' +
'Subject: hello 4\r\n' +
'Message-Id: <d>\r\n' +
'Date: Fri, 13 Sep 2013 15:01:00 +0300\r\n' +
'\r\n' +
'World 4!'
}, {
raw: 'Message-id: <e>\r\nSubject: hello 5\r\n\r\nWorld 5!'
}, {
raw: 'Message-id: <f>Subject: hello 6\r\n\r\nWorld 6!'
}, {
raw: 'Message-id: <g>\nFrom: safewithme.testuser@gmail.com\nTo: safewithme.testuser@gmail.com\nSubject: enigmail encrypted pgp/mime with attachment\nContent-Type: multipart/encrypted;\n protocol=\"application/pgp-encrypted\";\n boundary=\"abc\"\n\nThis is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)\n--abc\nContent-Type: application/pgp-encrypted\nContent-Description: PGP/MIME version identification\n\nVersion: 1\n\n--abc\nContent-Type: application/octet-stream; name=\"encrypted.asc\"\nContent-Description: OpenPGP encrypted message\nContent-Disposition: inline; filename=\"encrypted.asc\"\n\n-----BEGIN PGP MESSAGE-----\nVersion: GnuPG/MacGPG2 v2.0.22 (Darwin)\nComment: GPGTools - http://gpgtools.org\nComment: Using GnuPG with Thunderbird - http://www.enigmail.net/\n\n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
internaldate: '14-Sep-2013 20:22:28 -0300',
uid: 800
}, {
raw: "Message-id: <h>\nFrom: safewithme.testuser@gmail.com\nTo: safewithme.testuser@gmail.com\nSubject: enigmail encrypted signed pgp/mime with attachment\nContent-Type: multipart/encrypted;\n protocol=\"application/pgp-encrypted\";\n boundary=\"abc\"\n\nThis is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)\n--abc\nContent-Type: application/pgp-encrypted\nContent-Description: PGP/MIME version identification\n\nVersion: 1\n\n--abc\nContent-Type: application/octet-stream; name=\"encrypted.asc\"\nContent-Description: OpenPGP encrypted message\nContent-Disposition: inline; filename=\"encrypted.asc\"\n\n-----BEGIN PGP MESSAGE-----\nVersion: GnuPG/MacGPG2 v2.0.22 (Darwin)\nComment: GPGTools - http://gpgtools.org\nComment: Using GnuPG with Thunderbird - http://www.enigmail.net/\n\n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
internaldate: '14-Sep-2013 22:22:28 -0300',
uid: 801
}];
2014-06-11 03:42:34 -04:00
imapFolders = {
separator: '/',
folders: {
'[Gmail]': {
flags: ['\\Noselect'],
folders: {
'All Mail': {
'special-use': '\\All'
},
Drafts: {
'special-use': '\\Drafts'
},
Important: {
'special-use': '\\Important'
},
'Sent Mail': {
'special-use': '\\Sent'
},
Spam: {
'special-use': '\\Junk'
},
Starred: {
'special-use': '\\Flagged'
},
Trash: {
'special-use': '\\Trash'
}
}
}
}
};
2014-06-11 03:42:34 -04:00
var serverUsers = {};
serverUsers[testAccount.user] = {
password: testAccount.pass,
xoauth2: {
accessToken: testAccount.xoauth2,
sessionTimeout: 3600 * 1000
}
};
2014-06-11 03:42:34 -04:00
imapServer = new BrowserCrow({
debug: false,
plugins: ['sasl-ir', 'xoauth2', 'special-use', 'id', 'idle', 'unselect', 'enable', 'condstore'],
id: {
name: 'browsercrow',
version: '0.1.0'
},
storage: {
'INBOX': {
messages: imapMessages
},
'': imapFolders
},
users: serverUsers
});
2014-06-11 03:42:34 -04:00
smtpServer = new BrowserSMTP({
debug: false,
users: serverUsers
});
2014-06-11 03:42:34 -04:00
mockKeyPair = {
privateKey: {
_id: '0A45D6B44958B0AC',
userId: testAccount.user,
encryptedKey: '-----BEGIN PGP PRIVATE KEY BLOCK-----\r\nVersion: OpenPGP.js v.1.20131116\r\nComment: Whiteout Mail - http://whiteout.io\r\n\r\nxcL+BFKODs4BB/9iOF4THsjQMY+WEpT7ShgKxj4bHzRRaQkqczS4nZvP0U3g\r\nqeqCnbpagyeKXA+bhWFQW4GmXtgAoeD5PXs6AZYrw3tWNxLKu2Oe6Tp9K/XI\r\nxTMQ2wl4qZKDXHvuPsJ7cmgaWqpPyXtxA4zHHS3WrkI/6VzHAcI/y6x4szSB\r\nKgSuhI3hjh3s7TybUC1U6AfoQGx/S7e3WwlCOrK8GTClirN/2mCPRC5wuIft\r\nnkoMfA6jK8d2OPrJ63shy5cgwHOjQg/xuk46dNS7tkvGmbaa+X0PgqSKB+Hf\r\nYPPNS/ylg911DH9qa8BqYU2QpNh9jUKXSF+HbaOM+plWkCSAL7czV+R3ABEB\r\nAAH+AwMI8l5bp5J/xgpguvHaT2pX/6D8eU4dvODsvYE9Y4Clj0Nvm2nu4VML\r\nniNb8qpzCXXfFqi1FWGrZ2msClxA1eiXfk2IEe5iAiY3a+FplTevBn6rkAMw\r\nly8wGyiNdE3TVWgCEN5YRaTLpfV02c4ECyKk713EXRAtQCmdty0yxv5ak9ey\r\nXDUVd4a8T3QMgHcAOTXWMFJNUjeeiIdiThDbURJEv+9F+DW+4w5py2iw0PYJ\r\nNm6iAHCjoPQTbGLxstl2BYSocZWxG1usoPKhbugGZK0Vr8rdpsfakjJ9cJUg\r\nYHIH3VT+y+u5mhY681NrB5koRUxDT6ridbytMcoK8xpqYG3FhC8CiVnzpDQ3\r\no1KRkWuxUq66oJhu0wungXcqaDzDUEfeUjMuKVI/d9/ViXy8IH/XdlOy0lLY\r\nOac0ovRjb7zgeVOp2e7N4eTu0dts3SE+Do1gyqZo2rf1dwsJQI9YUtpjYAtr\r\nNBkKyRvBAhg9KPh1y2Y1u3ra5OS0yGuNDD8pXdiN3kxMt5OBlnWeFjL6ll7+\r\nvgiKZooPUZPbFIWi4XBXTv7D5T9THDYmuJpcOffn1AA7j2FM8fkFvtiFyw9J\r\n2S14penv2R7TeybxR6ktD7HtZd34gmGvmOxhWRNU/vfp4SisUcu9jzQq+cJt\r\njoWuJiZ8xvWEC2DD32n9bWyIlGhS4hATqz/gEdSha8hxzT+GJi29jYjp8Hnc\r\n9HwxOArz6Q5h/nDN2Xt5PuCM65J0dathzAm0A7BLRQI+4OjTW575sRKvarzH\r\n8JZ+UYK2BgP4Kbh9JqhnD/2NKD/csuL6No5guyOH8+zekdBtFE394SV8e9N+\r\nzYgzVex4SDG8y/YO7W7Tp6afNb+sqyzEw5Bknypn0Hc3cr9wy1P8jLMM2woL\r\nGRDZ5IutCAV/D/h881dHJs0tV2hpdGVvdXQgVXNlciA8c2FmZXdpdGhtZS50\r\nZXN0dXNlckBnbWFpbC5jb20+wsBcBBABCAAQBQJSjg7aCRDX+5P837/CPAAA\r\n3ZwH/2AVGYB+8RDarP5a5uZPYSxJKeM8zHMbi7LKQWhr5NpkJajZdra1CCGZ\r\nTXTeQSRBvU4SNGOmDAlhf0qCGeXwMHIzrzovkBedHIc/vypEkItdJeXQAaJx\r\nuhQOnmyi9priuzBBx4e9x1aBn+aAdNGiJB4l13L2T4fow8WLIVpVwXB6BWya\r\nlz50JwLzJP6qHxkhvIZElTrQ+Yoo3stS6w/7wNtK/f3MIYkIGVVUrIDgzN0X\r\nm4z6ypN1dsrM6tPkMZ0JlqjHiz7DXpKrWsfNkoVZ9A98osMH2nIDS58JVEDc\r\nAXoFSLsbdmqFmIc2Ew828TjlX+FLU9tlx89WhSMTapzUjHU=\r\n=wxuK\r\n-----END PGP PRIVATE KEY BLOCK-----'
},
publicKey: {
_id: '0A45D6B44958B0AC',
userId: testAccount.user,
publicKey: '-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v.1.20131116\r\nComment: Whiteout Mail - http://whiteout.io\r\n\r\nxsBNBFKODs4BB/9iOF4THsjQMY+WEpT7ShgKxj4bHzRRaQkqczS4nZvP0U3g\r\nqeqCnbpagyeKXA+bhWFQW4GmXtgAoeD5PXs6AZYrw3tWNxLKu2Oe6Tp9K/XI\r\nxTMQ2wl4qZKDXHvuPsJ7cmgaWqpPyXtxA4zHHS3WrkI/6VzHAcI/y6x4szSB\r\nKgSuhI3hjh3s7TybUC1U6AfoQGx/S7e3WwlCOrK8GTClirN/2mCPRC5wuIft\r\nnkoMfA6jK8d2OPrJ63shy5cgwHOjQg/xuk46dNS7tkvGmbaa+X0PgqSKB+Hf\r\nYPPNS/ylg911DH9qa8BqYU2QpNh9jUKXSF+HbaOM+plWkCSAL7czV+R3ABEB\r\nAAHNLVdoaXRlb3V0IFVzZXIgPHNhZmV3aXRobWUudGVzdHVzZXJAZ21haWwu\r\nY29tPsLAXAQQAQgAEAUCUo4O2gkQ1/uT/N+/wjwAAN2cB/9gFRmAfvEQ2qz+\r\nWubmT2EsSSnjPMxzG4uyykFoa+TaZCWo2Xa2tQghmU103kEkQb1OEjRjpgwJ\r\nYX9Kghnl8DByM686L5AXnRyHP78qRJCLXSXl0AGicboUDp5sovaa4rswQceH\r\nvcdWgZ/mgHTRoiQeJddy9k+H6MPFiyFaVcFwegVsmpc+dCcC8yT+qh8ZIbyG\r\nRJU60PmKKN7LUusP+8DbSv39zCGJCBlVVKyA4MzdF5uM+sqTdXbKzOrT5DGd\r\nCZaox4s+w16Sq1rHzZKFWfQPfKLDB9pyA0ufCVRA3AF6BUi7G3ZqhZiHNhMP\r\nNvE45V/hS1PbZcfPVoUjE2qc1Ix1\r\n=7Wpe\r\n-----END PGP PUBLIC KEY BLOCK-----'
}
};
// don't multithread, Function.prototype.bind() is broken in phantomjs in web workers
window.Worker = undefined;
navigator.online = true;
imapClient = new ImapClient({
auth: {
user: testAccount.user,
xoauth2: testAccount.xoauth2
},
secure: true,
ca: ['random string']
});
imapClient._client.client._TCPSocket = imapServer.createTCPSocket();
imapClient._listeningClient.client._TCPSocket = imapServer.createTCPSocket();
imapClient.onError = function(err) {
console.log('IMAP error.', err);
console.log('IMAP reconnecting...');
// re-init client modules on error
appController.onConnect(function(err) {
if (err) {
console.error('IMAP reconnect failed!', err);
return;
}
console.log('IMAP reconnect attempt complete.');
});
2014-06-11 03:42:34 -04:00
};
smtpClient = new SmtpClient('localhost', 25, {
auth: {
user: testAccount.user,
xoauth2: testAccount.xoauth2
},
secure: true,
ca: ['random string'],
onError: console.error
});
2014-06-11 03:42:34 -04:00
smtpClient._TCPSocket = smtpServer.createTCPSocket();
sinon.stub(mailreader, 'startWorker', function() {});
sinon.stub(openpgp, 'initWorker', function() {});
sinon.stub(appController, 'onConnect', function(cb) {
appController._emailDao.onConnect({
imapClient: imapClient,
pgpMailer: new PgpMailer({
tls: {
ca: 'random string'
}
}, appController._pgpbuilder)
}, cb);
});
appController.start({
onError: function() {}
}, function(err) {
expect(err).to.not.exist;
userStorage = appController._userStorage;
appController.init({
emailAddress: testAccount.user
}, function(err) {
expect(err).to.not.exist;
2014-06-11 03:42:34 -04:00
emailDao = appController._emailDao;
emailDao.onIncomingMessage = function() {};
emailDao.unlock({
passphrase: testAccount.pass,
keypair: mockKeyPair
}, function(err) {
expect(err).to.not.exist;
2014-06-11 03:42:34 -04:00
appController.onConnect(function(err) {
expect(err).to.not.exist;
done();
});
});
});
});
});
2014-06-11 03:42:34 -04:00
afterEach(function(done) {
openpgp.initWorker.restore();
mailreader.startWorker.restore();
appController.onConnect.restore();
imapClient._client.close();
imapClient._listeningClient.close();
userStorage.clear(done);
});
describe('IMAP Tests', function() {
var currentFolder;
beforeEach(function(done) {
emailDao.openFolder({
folder: {
path: 'INBOX'
}
}, function(err) {
expect(err).to.not.exist;
2014-06-11 03:42:34 -04:00
currentFolder = emailDao._account.folders.filter(function(folder) {
return folder.path === 'INBOX';
}).pop();
expect(currentFolder).to.exist;
done();
});
});
2014-06-11 03:42:34 -04:00
afterEach(function() {
emailDao.onIncomingMessage = function() {};
});
it('should receive new messages on startup', function(done) {
emailDao.onIncomingMessage = function(messages) {
expect(messages.length).to.equal(imapMessages.length);
done();
2014-06-11 03:42:34 -04:00
};
});
it('should receive new messages', function(done) {
emailDao.onIncomingMessage = function(messages) {
expect(messages.length).to.equal(imapMessages.length);
emailDao.onIncomingMessage = function(messages) {
expect(messages.length).to.equal(1);
expect(messages[0].answered).to.be.false;
emailDao.onIncomingMessage = function(messages) {
expect(messages.length).to.equal(1);
expect(messages[0].answered).to.be.true;
done();
};
};
setTimeout(function() {
imapServer.appendMessage('INBOX', ['$My$Flag'], false, 'Message-id: <n1>\r\nSubject: new message\r\n\r\nhello world!');
setTimeout(function() {
imapServer.appendMessage('INBOX', ['$My$Flag', '\\Answered'], false, 'Message-id: <n2>\r\nSubject: new message\r\n\r\nhello world!');
}, 1000);
}, 1000);
};
});
it('should delete a message', function(done) {
emailDao.onIncomingMessage = function() {
emailDao.deleteMessage({
folder: currentFolder,
message: {
uid: 600
}
}, function(err) {
expect(err).to.not.exist;
emailDao.openFolder({
folder: {
path: '[Gmail]/Trash'
}
}, function(err, folder) {
expect(err).to.not.exist;
expect(folder.exists).to.equal(1);
emailDao.onIncomingMessage = function(messages) {
expect(messages.length).to.equal(1);
expect(messages[0].id).to.equal('b');
done();
};
});
});
};
});
it('should get body', function(done) {
emailDao.onIncomingMessage = function(messages) {
emailDao.getBody({
folder: currentFolder,
message: messages[4]
}, function(err, message) {
expect(err).to.not.exist;
expect(message.body).to.equal('World 5!');
done();
});
};
});
[{
nr: 6,
hasAttachments: true
}, {
nr: 7,
hasAttachments: true
}].forEach(function(email) {
it('should get and decrypt body #' + email.nr, function(done) {
emailDao.onIncomingMessage = function(messages) {
emailDao.getBody({
folder: currentFolder,
message: messages[email.nr]
}, function(err, message) {
expect(err).to.not.exist;
emailDao.decryptBody({
message: message,
folder: currentFolder
}, function(err) {
expect(err).to.not.exist;
expect(message.body).to.equal('asdf');
if (email.hasAttachments) {
expect(message.attachments.length).to.equal(1);
}
done();
});
});
};
});
});
2014-06-11 03:42:34 -04:00
it('should set flags', function(done) {
emailDao.onIncomingMessage = function(messages) {
var message = messages[0];
message.unread = false;
message.answered = true;
emailDao.setFlags({
folder: currentFolder,
message: message
}, function(err) {
expect(err).to.not.exist;
done();
});
};
});
});
2014-06-11 03:42:34 -04:00
describe('SMTP Tests', function() {
// phantomjs is just sooo slow
it('should send a plaintext message', function(done) {
sinon.stub(smtpServer, 'onmail', function(mail) {
expect(mail.from).to.equal(testAccount.user);
expect(mail.to).to.deep.equal([testAccount.user]);
expect(/^Content-Type: multipart\/signed/.test(mail.body)).to.be.true;
});
emailDao.sendPlaintext({
smtpclient: smtpClient,
email: {
from: [testAccount.user],
to: [testAccount.user],
subject: 'plaintext test',
body: 'hello world!'
}
}, function(err) {
expect(err).to.not.exist;
2014-06-11 03:42:34 -04:00
expect(smtpServer.onmail.callCount).to.equal(1);
smtpServer.onmail.restore();
done();
});
});
2014-06-11 03:42:34 -04:00
it('should send an encrypted message', function(done) {
sinon.stub(smtpServer, 'onmail', function(mail) {
expect(mail.from).to.equal(testAccount.user);
expect(mail.to).to.deep.equal([testAccount.user]);
expect(/^Content-Type: multipart\/mixed/.test(mail.body)).to.be.true;
expect(mail.body).to.contain('this is a private conversation');
});
emailDao.sendEncrypted({
smtpclient: smtpClient,
email: {
from: [testAccount.user],
to: [testAccount.user],
subject: 'plaintext test',
body: 'hello world!',
publicKeysArmored: [mockKeyPair.publicKey.publicKey]
}
}, function(err) {
expect(err).to.not.exist;
2014-06-11 03:42:34 -04:00
expect(smtpServer.onmail.callCount).to.equal(1);
smtpServer.onmail.restore();
done();
});
});
});
});
});