2014-10-07 14:32:23 -04:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var controller = require('../../src/js/app-controller'),
|
|
|
|
EmailDAO = require('../../src/js/dao/email-dao'),
|
|
|
|
OutboxBO = require('../../src/js/bo/outbox'),
|
|
|
|
DeviceStorageDAO = require('../../src/js/dao/devicestorage-dao'),
|
|
|
|
UpdateHandler = require('../../src/js/util/update/update-handler'),
|
2014-11-06 08:28:14 -05:00
|
|
|
KeychainDAO = require('../../src/js/dao/keychain-dao'),
|
|
|
|
config = require('../../src/js/app-config').config,
|
2014-10-07 14:32:23 -04:00
|
|
|
Auth = require('../../src/js/bo/auth');
|
|
|
|
|
|
|
|
describe('App Controller unit tests', function() {
|
2014-11-06 08:28:14 -05:00
|
|
|
var emailDaoStub, outboxStub, updateHandlerStub, appConfigStoreStub, devicestorageStub, isOnlineStub, authStub, keychainStub;
|
2014-10-07 14:32:23 -04:00
|
|
|
|
|
|
|
beforeEach(function() {
|
|
|
|
controller._emailDao = emailDaoStub = sinon.createStubInstance(EmailDAO);
|
|
|
|
controller._outboxBo = outboxStub = sinon.createStubInstance(OutboxBO);
|
|
|
|
controller._appConfigStore = appConfigStoreStub = sinon.createStubInstance(DeviceStorageDAO);
|
|
|
|
controller._userStorage = devicestorageStub = sinon.createStubInstance(DeviceStorageDAO);
|
|
|
|
controller._updateHandler = updateHandlerStub = sinon.createStubInstance(UpdateHandler);
|
|
|
|
controller._auth = authStub = sinon.createStubInstance(Auth);
|
2014-11-06 08:28:14 -05:00
|
|
|
controller._keychain = keychainStub = sinon.createStubInstance(KeychainDAO);
|
2014-10-07 14:32:23 -04:00
|
|
|
|
|
|
|
isOnlineStub = sinon.stub(controller, 'isOnline');
|
|
|
|
});
|
2013-08-20 07:30:35 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
afterEach(function() {
|
|
|
|
isOnlineStub.restore();
|
|
|
|
});
|
2013-08-20 09:19:13 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('buildModules', function() {
|
|
|
|
it('should work', function() {
|
|
|
|
controller.buildModules({
|
|
|
|
onError: function() {}
|
|
|
|
});
|
|
|
|
expect(controller._appConfigStore).to.exist;
|
|
|
|
expect(controller._auth).to.exist;
|
|
|
|
expect(controller._userStorage).to.exist;
|
|
|
|
expect(controller._invitationDao).to.exist;
|
|
|
|
expect(controller._keychain).to.exist;
|
|
|
|
expect(controller._pgp).to.exist;
|
|
|
|
expect(controller._pgpbuilder).to.exist;
|
|
|
|
expect(controller._emailDao).to.exist;
|
|
|
|
expect(controller._outboxBo).to.exist;
|
|
|
|
expect(controller._updateHandler).to.exist;
|
2013-08-20 09:19:13 -04:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-08-20 09:19:13 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('start', function() {
|
|
|
|
it('should not explode', function(done) {
|
|
|
|
controller.start({
|
|
|
|
onError: function() {}
|
|
|
|
}, function(err) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
done();
|
2014-04-01 07:16:39 -04:00
|
|
|
});
|
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2014-04-01 07:16:39 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('onDisconnect', function() {
|
|
|
|
it('should work', function() {
|
|
|
|
controller.onDisconnect();
|
|
|
|
|
|
|
|
expect(emailDaoStub.onDisconnect.calledOnce).to.be.true;
|
2013-08-20 09:19:13 -04:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-08-20 07:30:35 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('logout', function() {
|
|
|
|
it('should work', function(done) {
|
|
|
|
authStub.logout.yields();
|
|
|
|
emailDaoStub.onDisconnect.yields(new Error());
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
controller.onError = function(err) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(authStub.logout.calledOnce).to.be.true;
|
2014-05-23 08:23:50 -04:00
|
|
|
expect(emailDaoStub.onDisconnect.calledOnce).to.be.true;
|
2014-10-07 14:32:23 -04:00
|
|
|
done();
|
|
|
|
};
|
|
|
|
|
|
|
|
controller.logout();
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('onConnect', function() {
|
|
|
|
beforeEach(function() {
|
|
|
|
controller._emailDao._account = {};
|
|
|
|
});
|
2014-09-26 13:14:53 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should not connect if offline', function(done) {
|
|
|
|
isOnlineStub.returns(false);
|
2014-09-26 13:14:53 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
controller.onConnect(function(err) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
done();
|
2014-09-26 13:14:53 -04:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should not connect if account is not initialized', function(done) {
|
|
|
|
controller._emailDao._account = null;
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
controller.onConnect(function(err) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
done();
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should fail due to error in auth.getCredentials', function(done) {
|
|
|
|
isOnlineStub.returns(true);
|
|
|
|
authStub.getCredentials.yields(new Error());
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
controller.onConnect(function(err) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(authStub.getCredentials.calledOnce).to.be.true;
|
|
|
|
done();
|
2013-10-09 10:40:36 -04:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-10-09 10:40:36 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should work', function(done) {
|
|
|
|
isOnlineStub.returns(true);
|
|
|
|
authStub.getCredentials.yields(null, {
|
|
|
|
emailAddress: 'asdf@example.com',
|
|
|
|
oauthToken: 'token',
|
|
|
|
sslCert: 'cert',
|
|
|
|
imap: {},
|
|
|
|
smtp: {}
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
emailDaoStub.onConnect.yields();
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
controller.onConnect(function(err) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
expect(authStub.getCredentials.calledOnce).to.be.true;
|
|
|
|
expect(emailDaoStub.onConnect.calledOnce).to.be.true;
|
|
|
|
done();
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
describe('init', function() {
|
2014-11-06 08:28:14 -05:00
|
|
|
var onConnectStub, emailAddress, keysWithPubKey;
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
beforeEach(function() {
|
|
|
|
emailAddress = 'alice@bob.com';
|
2014-11-06 08:28:14 -05:00
|
|
|
keysWithPubKey = {
|
|
|
|
publicKey: {}
|
|
|
|
};
|
2014-03-11 12:49:47 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
// onConnect
|
|
|
|
onConnectStub = sinon.stub(controller, 'onConnect');
|
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
afterEach(function() {
|
|
|
|
onConnectStub.restore();
|
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-11-06 08:28:14 -05:00
|
|
|
it('should fail due to malformed email address', function(done) {
|
|
|
|
controller.init({
|
|
|
|
emailAddress: 'ishallfail'
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should fail due to error in storage initialization', function(done) {
|
2014-11-06 08:28:14 -05:00
|
|
|
devicestorageStub.init.withArgs(emailAddress).yields(new Error());
|
2014-03-11 13:27:02 -04:00
|
|
|
|
2014-11-06 08:28:14 -05:00
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
2014-10-07 14:32:23 -04:00
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.false;
|
|
|
|
done();
|
2014-03-11 13:27:02 -04:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2014-03-11 13:27:02 -04:00
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should fail due to error in update handler', function(done) {
|
|
|
|
devicestorageStub.init.yields();
|
2014-11-06 08:28:14 -05:00
|
|
|
updateHandlerStub.update.yields(new Error());
|
2014-10-07 14:32:23 -04:00
|
|
|
|
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.true;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
|
|
|
done();
|
2014-03-11 12:49:47 -04:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2014-03-11 12:49:47 -04:00
|
|
|
|
2014-11-06 08:28:14 -05:00
|
|
|
it('should fail due to error in getUserKeyPair', function(done) {
|
|
|
|
devicestorageStub.init.yields();
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(new Error());
|
|
|
|
|
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.true;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
|
|
|
expect(keychainStub.getUserKeyPair.calledOnce).to.be.true;
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail due to error in refreshKeyForUserId', function(done) {
|
|
|
|
devicestorageStub.init.yields();
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, keysWithPubKey);
|
|
|
|
keychainStub.refreshKeyForUserId.yields(new Error());
|
|
|
|
|
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.true;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
|
|
|
expect(keychainStub.getUserKeyPair.calledOnce).to.be.true;
|
|
|
|
expect(keychainStub.refreshKeyForUserId.calledOnce).to.be.true;
|
|
|
|
done();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
it('should fail due to error in emailDao.init', function(done) {
|
|
|
|
devicestorageStub.init.yields();
|
|
|
|
updateHandlerStub.update.yields();
|
2014-11-06 08:28:14 -05:00
|
|
|
keychainStub.getUserKeyPair.yields(null, keysWithPubKey);
|
|
|
|
keychainStub.refreshKeyForUserId.yields();
|
|
|
|
emailDaoStub.init.yields(new Error());
|
2014-10-07 14:32:23 -04:00
|
|
|
|
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keypair).to.not.exist;
|
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.true;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
2014-11-06 08:28:14 -05:00
|
|
|
expect(keychainStub.getUserKeyPair.calledOnce).to.be.true;
|
|
|
|
expect(keychainStub.refreshKeyForUserId.calledOnce).to.be.true;
|
|
|
|
expect(emailDaoStub.init.calledOnce).to.be.true;
|
2014-10-07 14:32:23 -04:00
|
|
|
done();
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
2014-10-07 14:32:23 -04:00
|
|
|
});
|
2013-12-09 13:21:52 -05:00
|
|
|
|
2014-11-06 08:28:14 -05:00
|
|
|
it('should work and not return a keypair', function(done) {
|
2014-10-07 14:32:23 -04:00
|
|
|
devicestorageStub.init.withArgs(emailAddress).yields();
|
|
|
|
updateHandlerStub.update.yields();
|
2014-11-06 08:28:14 -05:00
|
|
|
keychainStub.getUserKeyPair.withArgs(emailAddress).yields(null, keysWithPubKey);
|
|
|
|
keychainStub.refreshKeyForUserId.withArgs({
|
|
|
|
userId: emailAddress,
|
|
|
|
overridePermission: true
|
|
|
|
}).yields();
|
|
|
|
emailDaoStub.init.withArgs({
|
|
|
|
account: {
|
|
|
|
realname: undefined,
|
|
|
|
emailAddress: emailAddress,
|
|
|
|
asymKeySize: config.asymKeySize
|
|
|
|
}
|
|
|
|
}).yields();
|
2014-10-07 14:32:23 -04:00
|
|
|
|
|
|
|
controller.init({
|
|
|
|
emailAddress: emailAddress
|
|
|
|
}, function(err, keypair) {
|
|
|
|
expect(err).to.not.exist;
|
2014-11-06 08:28:14 -05:00
|
|
|
expect(keypair.publicKey).to.not.exist;
|
2014-10-07 14:32:23 -04:00
|
|
|
expect(updateHandlerStub.update.calledOnce).to.be.true;
|
|
|
|
expect(devicestorageStub.init.calledOnce).to.be.true;
|
2014-11-06 08:28:14 -05:00
|
|
|
expect(keychainStub.getUserKeyPair.calledOnce).to.be.true;
|
|
|
|
expect(keychainStub.refreshKeyForUserId.calledOnce).to.be.true;
|
|
|
|
expect(emailDaoStub.init.calledOnce).to.be.true;
|
|
|
|
|
2014-10-07 14:32:23 -04:00
|
|
|
done();
|
2013-12-09 13:21:52 -05:00
|
|
|
});
|
|
|
|
});
|
2013-08-20 07:30:35 -04:00
|
|
|
});
|
|
|
|
});
|