2014-11-21 11:25:55 -05:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var Account = require('../../../src/js/email/account'),
|
|
|
|
appConfig = require('../../../src/js/app-config'),
|
|
|
|
Auth = require('../../../src/js/service/auth'),
|
|
|
|
DeviceStorageDAO = require('../../../src/js/service/devicestorage'),
|
|
|
|
Email = require('../../../src/js/email/email'),
|
|
|
|
Outbox = require('../../../src/js/email/outbox'),
|
|
|
|
Keychain = require('../../../src/js/service/keychain'),
|
2014-11-25 06:07:26 -05:00
|
|
|
UpdateHandler = require('../../../src/js/util/update/update-handler'),
|
|
|
|
Dialog = require('../../../src/js/util/dialog');
|
2014-11-21 11:25:55 -05:00
|
|
|
|
|
|
|
describe('Account Service unit test', function() {
|
2014-11-25 06:07:26 -05:00
|
|
|
var account, authStub, outboxStub, emailStub, devicestorageStub, keychainStub, updateHandlerStub, pgpbuilderStub, dialogStub,
|
2014-11-24 12:07:09 -05:00
|
|
|
realname = 'John Doe',
|
2014-11-21 11:25:55 -05:00
|
|
|
dummyUser = 'spiderpig@springfield.com';
|
|
|
|
|
|
|
|
chai.config.includeStack = true;
|
|
|
|
|
|
|
|
beforeEach(function() {
|
|
|
|
authStub = sinon.createStubInstance(Auth);
|
|
|
|
outboxStub = sinon.createStubInstance(Outbox);
|
|
|
|
devicestorageStub = sinon.createStubInstance(DeviceStorageDAO);
|
|
|
|
emailStub = sinon.createStubInstance(Email);
|
|
|
|
outboxStub = sinon.createStubInstance(Outbox);
|
|
|
|
keychainStub = sinon.createStubInstance(Keychain);
|
|
|
|
updateHandlerStub = sinon.createStubInstance(UpdateHandler);
|
|
|
|
pgpbuilderStub = {};
|
2014-11-25 06:07:26 -05:00
|
|
|
dialogStub = sinon.createStubInstance(Dialog);
|
|
|
|
account = new Account(appConfig, authStub, devicestorageStub, emailStub, outboxStub, keychainStub, updateHandlerStub, pgpbuilderStub, dialogStub);
|
2014-11-21 11:25:55 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
afterEach(function() {});
|
|
|
|
|
|
|
|
describe('isLoggedIn', function() {
|
|
|
|
it('should be logged in', function() {
|
|
|
|
account._accounts = [{}];
|
|
|
|
expect(account.isLoggedIn()).to.be.true;
|
|
|
|
});
|
|
|
|
it('should not be logged in', function() {
|
|
|
|
account._accounts = [];
|
|
|
|
expect(account.isLoggedIn()).to.be.false;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('list', function() {
|
|
|
|
it('should work', function() {
|
|
|
|
var testAccounts = [{
|
|
|
|
foo: 'bar'
|
|
|
|
}];
|
|
|
|
account._accounts = testAccounts;
|
|
|
|
expect(account.list()).to.deep.equal(testAccounts);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-11-24 12:07:09 -05:00
|
|
|
describe('init', function() {
|
|
|
|
it('should fail for invalid email address', function() {
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser.replace('@'),
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err).to.exist;
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _accountStore.init', function() {
|
2014-12-01 08:55:03 -05:00
|
|
|
devicestorageStub.init.yields(new Error('asdf'));
|
2014-11-24 12:07:09 -05:00
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/asdf/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _updateHandler.update', function() {
|
|
|
|
updateHandlerStub.update.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/Updating/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _keychain.getUserKeyPair', function() {
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/asdf/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _keychain.refreshKeyForUserId', function() {
|
|
|
|
var storedKeys = {
|
|
|
|
publicKey: 'publicKey'
|
|
|
|
};
|
|
|
|
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, storedKeys);
|
|
|
|
keychainStub.refreshKeyForUserId.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/asdf/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _emailDao.init after _keychain.refreshKeyForUserId', function() {
|
|
|
|
var storedKeys = {
|
|
|
|
publicKey: 'publicKey'
|
|
|
|
};
|
|
|
|
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, storedKeys);
|
|
|
|
keychainStub.refreshKeyForUserId.yields(null, storedKeys);
|
|
|
|
emailStub.init.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/asdf/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail for _emailDao.init', function() {
|
|
|
|
var storedKeys = {
|
|
|
|
publicKey: 'publicKey',
|
|
|
|
privateKey: 'privateKey'
|
|
|
|
};
|
|
|
|
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, storedKeys);
|
|
|
|
emailStub.init.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err.message).to.match(/asdf/);
|
|
|
|
expect(keys).to.not.exist;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should work after _keychain.refreshKeyForUserId', function() {
|
|
|
|
var storedKeys = {
|
|
|
|
publicKey: 'publicKey'
|
|
|
|
};
|
|
|
|
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, storedKeys);
|
|
|
|
keychainStub.refreshKeyForUserId.yields(null, 'publicKey');
|
|
|
|
emailStub.init.yields();
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
expect(keys).to.deep.equal(storedKeys);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should work', function() {
|
|
|
|
var storedKeys = {
|
|
|
|
publicKey: 'publicKey',
|
|
|
|
privateKey: 'privateKey'
|
|
|
|
};
|
|
|
|
|
|
|
|
updateHandlerStub.update.yields();
|
|
|
|
keychainStub.getUserKeyPair.yields(null, storedKeys);
|
|
|
|
emailStub.init.yields();
|
|
|
|
|
|
|
|
account.init({
|
|
|
|
emailAddress: dummyUser,
|
|
|
|
realname: realname
|
|
|
|
}, onInit);
|
|
|
|
|
|
|
|
function onInit(err, keys) {
|
|
|
|
expect(err).to.not.exist;
|
|
|
|
expect(keys).to.equal(storedKeys);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-11-25 06:07:26 -05:00
|
|
|
describe('onConnect', function() {
|
|
|
|
var credentials = {
|
|
|
|
imap: {},
|
|
|
|
smtp: {}
|
|
|
|
};
|
|
|
|
beforeEach(function() {
|
|
|
|
emailStub._account = {};
|
|
|
|
sinon.stub(account, 'isOnline').returns(true);
|
|
|
|
});
|
|
|
|
afterEach(function() {
|
|
|
|
account.isOnline.restore();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail due to _auth.getCredentials', function() {
|
|
|
|
authStub.getCredentials.yields(new Error('asdf'));
|
|
|
|
|
|
|
|
account.onConnect();
|
|
|
|
|
|
|
|
expect(dialogStub.error.calledOnce).to.be.true;
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should work', function() {
|
|
|
|
authStub.getCredentials.yields(null, credentials);
|
|
|
|
emailStub.onConnect.yields();
|
|
|
|
|
|
|
|
account.onConnect();
|
|
|
|
|
|
|
|
expect(emailStub.onConnect.calledOnce).to.be.true;
|
|
|
|
expect(dialogStub.error.calledOnce).to.be.true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('onDisconnect', function() {
|
|
|
|
it('should work', function() {
|
|
|
|
account.onDisconnect();
|
|
|
|
expect(emailStub.onDisconnect.calledOnce).to.be.true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('logout', function() {
|
|
|
|
it('should fail due to _auth.logout', function() {
|
|
|
|
authStub.logout.yields(new Error());
|
|
|
|
|
|
|
|
account.logout();
|
|
|
|
|
|
|
|
expect(dialogStub.error.calledOnce).to.be.true;
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should fail due to _emailDao.onDisconnect', function() {
|
|
|
|
authStub.logout.yields();
|
|
|
|
emailStub.onDisconnect.yields(new Error());
|
|
|
|
|
|
|
|
account.logout();
|
|
|
|
|
|
|
|
expect(dialogStub.error.calledOnce).to.be.true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-11-21 11:25:55 -05:00
|
|
|
});
|