'use strict';
var ImapClient = require('imap-client'),
BrowserCrow = require('browsercrow'),
mailreader = require('mailreader'),
config = require('../../src/js/app-config'),
str = config.string;
describe('Public-Key Verifier integration tests', function() {
this.timeout(10 * 1000);
var verifier; // SUT
var imapServer, keyId, workingUUID, outdatedUUID; // fixture
var imapClient, auth, keychain; // stubs
beforeEach(function(done) {
//
// Test data
//
keyId = '1234DEADBEEF';
workingUUID = '8314D2BF-82E5-4862-A614-1EA8CD582485';
outdatedUUID = 'CA8BD44B-E4C5-4D48-82AB-33DA2E488CF7';
//
// Test server setup
//
var testAccount = {
user: 'safewithme.testuser@gmail.com',
pass: 'passphrase',
xoauth2: 'testtoken'
};
var serverUsers = {};
serverUsers[testAccount.user] = {
password: testAccount.pass,
xoauth2: {
accessToken: testAccount.xoauth2,
sessionTimeout: 3600 * 1000
}
};
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: [{
raw: 'Message-id: \r\nSubject: ' + str.verificationSubject + '\r\n\r\nhttps://keys.whiteout.io/verify/' + outdatedUUID,
uid: 100
}, {
raw: 'Message-id: \r\nSubject: ' + str.verificationSubject + '\r\n\r\nhttps://keys.whiteout.io/verify/' + workingUUID,
uid: 200
}]
},
'': {
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'
}
}
}
}
}
},
users: serverUsers
});
// don't multithread, Function.prototype.bind() is broken in phantomjs in web workers
window.Worker = undefined;
sinon.stub(mailreader, 'startWorker', function() {});
// build and inject angular services
angular.module('email-integration-test', ['woEmail']);
angular.mock.module('email-integration-test');
angular.mock.inject(function($injector) {
verifier = $injector.get('publickeyVerifier');
setup();
});
function setup() {
auth = verifier._auth;
auth.setCredentials({
emailAddress: testAccount.user,
password: 'asd',
smtp: {}, // host and port don't matter here since we're using
imap: {} // a preconfigured smtpclient with mocked tcp sockets
});
// avoid firing up a whole http
keychain = verifier._keychain;
keychain.verifyPublicKey = function(uuid) {
return new Promise(function(res, rej) {
if (uuid === workingUUID) {
res();
} else {
rej();
}
});
};
// create imap/smtp clients with stubbed tcp sockets
imapClient = new ImapClient({
auth: {
user: testAccount.user,
xoauth2: testAccount.xoauth2
},
secure: true
});
imapClient._client.client._TCPSocket = imapServer.createTCPSocket();
auth._initialized = true;
verifier._imap = imapClient;
verifier._keyId = keyId;
done();
}
});
describe('#verify', function() {
it('should verify a key', function(done) {
verifier.verify(keyId).then(done);
});
});
});