mirror of
https://github.com/moparisthebest/mail
synced 2024-12-02 05:42:20 -05:00
b7a4c13766
Use all pgp (sub) keys when en/decrypting a pgp message Improve input validation for key import Mark manually imported keys so that key refresh does not revoke them
190 lines
6.1 KiB
JavaScript
190 lines
6.1 KiB
JavaScript
define(function(require) {
|
|
'use strict';
|
|
|
|
var expect = chai.expect,
|
|
angular = require('angular'),
|
|
mocks = require('angularMocks'),
|
|
ContactsCtrl = require('js/controller/contacts'),
|
|
appController = require('js/app-controller'),
|
|
KeychainDAO = require('js/dao/keychain-dao'),
|
|
PGP = require('js/crypto/pgp');
|
|
|
|
describe('Contacts Controller unit test', function() {
|
|
var scope, contactsCtrl,
|
|
origKeychain, keychainMock,
|
|
origCrypto, cryptoMock;
|
|
|
|
beforeEach(function() {
|
|
origCrypto = appController._crypto;
|
|
appController._crypto = cryptoMock = sinon.createStubInstance(PGP);
|
|
origKeychain = appController._keychain;
|
|
appController._keychain = keychainMock = sinon.createStubInstance(KeychainDAO);
|
|
|
|
angular.module('contactstest', []);
|
|
mocks.module('contactstest');
|
|
mocks.inject(function($rootScope, $controller) {
|
|
scope = $rootScope.$new();
|
|
scope.state = {};
|
|
contactsCtrl = $controller(ContactsCtrl, {
|
|
$scope: scope
|
|
});
|
|
});
|
|
});
|
|
|
|
afterEach(function() {
|
|
// restore the module
|
|
appController._crypto = origCrypto;
|
|
appController._keychain = origKeychain;
|
|
});
|
|
|
|
describe('scope variables', function() {
|
|
it('should be set correctly', function() {
|
|
expect(scope.fingerprint).to.equal('XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX');
|
|
expect(scope.state.contacts.toggle).to.exist;
|
|
});
|
|
});
|
|
|
|
describe('listKeys', function() {
|
|
it('should fail due to error in keychain.listLocalPublicKeys', function(done) {
|
|
keychainMock.listLocalPublicKeys.yields(42);
|
|
|
|
scope.onError = function(err) {
|
|
expect(err).to.equal(42);
|
|
done();
|
|
};
|
|
|
|
scope.listKeys();
|
|
});
|
|
|
|
it('should work', function(done) {
|
|
keychainMock.listLocalPublicKeys.yields(null, [{
|
|
_id: '12345'
|
|
}]);
|
|
cryptoMock.getKeyParams.returns({
|
|
fingerprint: 'asdf'
|
|
});
|
|
|
|
scope.$apply = function() {
|
|
expect(scope.keys.length).to.equal(1);
|
|
expect(scope.keys[0]._id).to.equal('12345');
|
|
expect(scope.keys[0].fingerprint).to.equal('asdf');
|
|
done();
|
|
};
|
|
|
|
expect(scope.keys).to.not.exist;
|
|
scope.listKeys();
|
|
});
|
|
});
|
|
|
|
describe('getFingerprint', function() {
|
|
it('should work', function() {
|
|
var key = {
|
|
fingerprint: 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
|
|
};
|
|
|
|
scope.getFingerprint(key);
|
|
|
|
expect(scope.fingerprint).to.equal('YYYY YYYY YYYY YYYY YYYY ... YYYY YYYY YYYY YYYY YYYY');
|
|
});
|
|
});
|
|
|
|
describe('importKey', function() {
|
|
it('should work', function(done) {
|
|
var keyArmored = '-----BEGIN PGP PUBLIC KEY BLOCK-----';
|
|
|
|
cryptoMock.getKeyParams.returns({
|
|
_id: '12345',
|
|
userId: 'max@example.com',
|
|
userIds: []
|
|
});
|
|
|
|
keychainMock.saveLocalPublicKey.withArgs({
|
|
_id: '12345',
|
|
userId: 'max@example.com',
|
|
userIds: [],
|
|
publicKey: '-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
imported: true
|
|
}).yields();
|
|
|
|
scope.listKeys = function() {
|
|
done();
|
|
};
|
|
|
|
scope.importKey(keyArmored);
|
|
});
|
|
|
|
it('should fail due to invalid armored key', function(done) {
|
|
var keyArmored = '-----BEGIN PGP PRIVATE KEY BLOCK-----';
|
|
|
|
scope.onError = function(err) {
|
|
expect(err).to.exist;
|
|
done();
|
|
};
|
|
|
|
scope.importKey(keyArmored);
|
|
});
|
|
|
|
it('should fail due to error in pgp.getKeyParams', function(done) {
|
|
var keyArmored = '-----BEGIN PGP PUBLIC KEY BLOCK-----';
|
|
|
|
cryptoMock.getKeyParams.throws(new Error('WAT'));
|
|
|
|
scope.onError = function(err) {
|
|
expect(err).to.exist;
|
|
done();
|
|
};
|
|
|
|
scope.importKey(keyArmored);
|
|
});
|
|
|
|
it('should fail due to error in keychain.saveLocalPublicKey', function(done) {
|
|
var keyArmored = '-----BEGIN PGP PUBLIC KEY BLOCK-----';
|
|
|
|
cryptoMock.getKeyParams.returns({
|
|
_id: '12345',
|
|
userId: 'max@example.com'
|
|
});
|
|
|
|
keychainMock.saveLocalPublicKey.yields(42);
|
|
|
|
scope.onError = function(err) {
|
|
expect(err).to.equal(42);
|
|
done();
|
|
};
|
|
|
|
scope.importKey(keyArmored);
|
|
});
|
|
});
|
|
|
|
describe('removeKey', function() {
|
|
it('should work', function(done) {
|
|
var key = {
|
|
_id: '12345'
|
|
};
|
|
|
|
keychainMock.removeLocalPublicKey.withArgs('12345').yields();
|
|
|
|
scope.listKeys = function() {
|
|
done();
|
|
};
|
|
|
|
scope.removeKey(key);
|
|
});
|
|
|
|
it('should fail due to error in keychain.removeLocalPublicKey', function(done) {
|
|
var key = {
|
|
_id: '12345'
|
|
};
|
|
|
|
keychainMock.removeLocalPublicKey.withArgs('12345').yields(42);
|
|
|
|
scope.onError = function(err) {
|
|
expect(err).to.equal(42);
|
|
done();
|
|
};
|
|
|
|
scope.removeKey(key);
|
|
});
|
|
});
|
|
});
|
|
}); |