fix tests

This commit is contained in:
Tankred Hase 2014-01-14 16:11:59 +01:00
parent 9bb70fac5d
commit 0dc1cc68bc
2 changed files with 232 additions and 73 deletions

View File

@ -30,7 +30,7 @@ define(function(require) {
fillFields(replyTo); fillFields(replyTo);
$scope.updatePreview(); $scope.updatePreview();
verify($scope.to[0]); $scope.verify($scope.to[0]);
}, },
close: function() { close: function() {
this.open = false; this.open = false;
@ -83,6 +83,9 @@ define(function(require) {
// Editing headers // Editing headers
// //
/**
* This event is fired when editing the email address headers. It checks is space is pressed and if so, creates a new address field.
*/
$scope.onAddressUpdate = function(field, index) { $scope.onAddressUpdate = function(field, index) {
var recipient = field[index], var recipient = field[index],
address = recipient.address; address = recipient.address;
@ -97,10 +100,13 @@ define(function(require) {
field.splice(field.indexOf(recipient), 1); field.splice(field.indexOf(recipient), 1);
} }
verify(recipient); $scope.verify(recipient);
}; };
function verify(recipient) { /**
* Verify and email address and fetch its public key
*/
$scope.verify = function(recipient) {
// set display to insecure while fetching keys // set display to insecure while fetching keys
recipient.key = undefined; recipient.key = undefined;
recipient.secure = false; recipient.secure = false;
@ -108,7 +114,7 @@ define(function(require) {
// verify email address // verify email address
if (!util.validateEmailAddress(recipient.address)) { if (!util.validateEmailAddress(recipient.address)) {
recipient.secure = undefined; recipient.secure = undefined;
checkSendStatus(); $scope.checkSendStatus();
return; return;
} }
@ -125,12 +131,15 @@ define(function(require) {
recipient.secure = true; recipient.secure = true;
} }
checkSendStatus(); $scope.checkSendStatus();
$scope.$apply(); $scope.$apply();
}); });
} };
function checkSendStatus() { /**
* Check if it is ok to send an email depending on the invitation state of the addresses
*/
$scope.checkSendStatus = function() {
$scope.okToSend = false; $scope.okToSend = false;
$scope.sendBtnText = undefined; $scope.sendBtnText = undefined;
$scope.sendBtnSecure = undefined; $scope.sendBtnSecure = undefined;
@ -165,7 +174,7 @@ define(function(require) {
$scope.okToSend = true; $scope.okToSend = true;
$scope.sendBtnSecure = true; $scope.sendBtnSecure = true;
} }
} };
// //
// Editing email body // Editing email body

View File

@ -47,7 +47,9 @@ define(function(require) {
expect(scope.state.writer.open).to.be.false; expect(scope.state.writer.open).to.be.false;
expect(scope.state.writer.write).to.exist; expect(scope.state.writer.write).to.exist;
expect(scope.state.writer.close).to.exist; expect(scope.state.writer.close).to.exist;
expect(scope.verifyTo).to.exist; expect(scope.verify).to.exist;
expect(scope.onAddressUpdate).to.exist;
expect(scope.checkSendStatus).to.exist;
expect(scope.updatePreview).to.exist; expect(scope.updatePreview).to.exist;
expect(scope.sendToOutbox).to.exist; expect(scope.sendToOutbox).to.exist;
}); });
@ -65,22 +67,24 @@ define(function(require) {
describe('write', function() { describe('write', function() {
it('should prepare write view', function() { it('should prepare write view', function() {
var verifyToMock = sinon.stub(scope, 'verifyTo'); var verifyMock = sinon.stub(scope, 'verify');
scope.state.writer.write(); scope.state.writer.write();
expect(scope.writerTitle).to.equal('New email'); expect(scope.writerTitle).to.equal('New email');
expect(scope.to).to.equal(''); expect(scope.to).to.deep.equal([{
address: ''
}]);
expect(scope.subject).to.equal(''); expect(scope.subject).to.equal('');
expect(scope.body).to.equal(''); expect(scope.body).to.equal('');
expect(scope.ciphertextPreview).to.equal(''); expect(scope.ciphertextPreview).to.equal('');
expect(verifyToMock.calledOnce).to.be.true; expect(verifyMock.calledOnce).to.be.true;
scope.verifyTo.restore(); scope.verify.restore();
}); });
it('should prefill write view for response', function() { it('should prefill write view for response', function() {
var verifyToMock = sinon.stub(scope, 'verifyTo'), var verifyMock = sinon.stub(scope, 'verify'),
address = 'pity@dafool', address = 'pity@dafool',
subject = 'Ermahgerd!', subject = 'Ermahgerd!',
body = 'so much body!', body = 'so much body!',
@ -96,61 +100,210 @@ define(function(require) {
scope.state.writer.write(re); scope.state.writer.write(re);
expect(scope.writerTitle).to.equal('Reply'); expect(scope.writerTitle).to.equal('Reply');
expect(scope.to).to.equal(address); expect(scope.to).to.deep.equal([{
address: address,
}, {
address: ''
}]);
expect(scope.subject).to.equal('Re: ' + subject); expect(scope.subject).to.equal('Re: ' + subject);
expect(scope.body).to.contain(body); expect(scope.body).to.contain(body);
expect(scope.ciphertextPreview).to.not.be.empty; expect(scope.ciphertextPreview).to.not.be.empty;
expect(verifyToMock.calledOnce).to.be.true; expect(verifyMock.calledOnce).to.be.true;
scope.verifyTo.restore(); scope.verify.restore();
}); });
}); });
describe('verifyTo', function() { describe('onAddressUpdate', function() {
it('should verify the recipient as secure', function() { var verifyMock;
var id = scope.to = 'pity@da.fool';
keychainMock.getReceiverPublicKey.withArgs(id).yields(null, {
userId: id
});
scope.verifyTo(); beforeEach(function() {
verifyMock = sinon.stub(scope, 'verify');
expect(scope.toSecure).to.be.true;
expect(scope.sendBtnText).to.equal('Send securely');
}); });
it('should verify the recipient as not secure', function(done) { afterEach(function() {
var id = scope.to = 'pity@da.fool'; scope.verify.restore();
keychainMock.getReceiverPublicKey.withArgs(id).yields({ });
it('should add new field item if space is pressed', function() {
var to = [{
address: 'asdf@asdf.de '
}];
scope.onAddressUpdate(to, 0);
expect(to.length).to.equal(2);
expect(to[0].address).to.equal('asdf@asdf.de');
expect(to[1].address).to.equal('');
expect(verifyMock.calledOnce).to.be.true;
});
it('should remove field item if address is empty', function() {
var to = [{
address: 'asdf@asdf.de'
}, {
address: ''
}];
scope.onAddressUpdate(to, 1);
expect(to.length).to.equal(1);
expect(to[0].address).to.equal('asdf@asdf.de');
expect(verifyMock.calledOnce).to.be.true;
});
it('should not remove last field item if address is empty', function() {
var to = [{
address: ''
}];
scope.onAddressUpdate(to, 0);
expect(to.length).to.equal(1);
expect(to[0].address).to.equal('');
expect(verifyMock.calledOnce).to.be.true;
});
it('should do nothing for normal address', function() {
var to = [{
address: 'asdf@asdf.de'
}];
scope.onAddressUpdate(to, 0);
expect(to.length).to.equal(1);
expect(to[0].address).to.equal('asdf@asdf.de');
expect(verifyMock.calledOnce).to.be.true;
});
});
describe('verify', function() {
var checkSendStatusMock;
beforeEach(function() {
checkSendStatusMock = sinon.stub(scope, 'checkSendStatus');
});
afterEach(function() {
scope.checkSendStatus.restore();
});
it('should not work for invalid email addresses', function() {
var recipient = {
address: ''
};
scope.verify(recipient);
expect(recipient.key).to.be.undefined;
expect(recipient.secure).to.be.undefined;
expect(scope.checkSendStatus.calledOnce).to.be.true;
expect(keychainMock.getReceiverPublicKey.called).to.be.false;
});
it('should not work for error in keychain', function(done) {
var recipient = {
address: 'asds@example.com'
};
keychainMock.getReceiverPublicKey.withArgs(recipient.address).yields({
errMsg: '404 not found yadda yadda' errMsg: '404 not found yadda yadda'
}); });
scope.onError = function() { scope.onError = function() {
expect(scope.toSecure).to.be.false; expect(recipient.key).to.be.undefined;
expect(scope.sendBtnText).to.equal('Invite & send securely'); expect(recipient.secure).to.be.false;
expect(scope.checkSendStatus.called).to.be.false;
expect(keychainMock.getReceiverPublicKey.calledOnce).to.be.true;
done(); done();
}; };
scope.verifyTo(); scope.verify(recipient);
}); });
it('should reset display if there is no recipient', function() { it('should work', function(done) {
scope.to = undefined; var recipient = {
scope.verifyTo(); address: 'asdf@example.com'
};
keychainMock.getReceiverPublicKey.yields(null, {
userId: 'asdf@example.com'
});
scope.$apply = function() {
expect(recipient.key).to.deep.equal({
userId: 'asdf@example.com'
});
expect(recipient.secure).to.be.true;
expect(scope.checkSendStatus.calledOnce).to.be.true;
expect(keychainMock.getReceiverPublicKey.calledOnce).to.be.true;
done();
};
scope.verify(recipient);
});
});
describe('checkSendStatus', function() {
beforeEach(function() {
scope.state.writer.write();
});
afterEach(function() {});
it('should not be able to send with no recipients', function() {
scope.checkSendStatus();
expect(scope.okToSend).to.be.false;
expect(scope.sendBtnText).to.be.undefined;
expect(scope.sendBtnSecure).to.be.undefined;
});
it('should not be to invite 1 user', function() {
scope.to = [{
address: 'asdf@asdf.de'
}];
scope.checkSendStatus();
expect(scope.okToSend).to.be.true;
expect(scope.sendBtnText).to.equal('Invite & send securely');
expect(scope.sendBtnSecure).to.be.false;
});
it('should not be able to invite multiple recipients', function() {
scope.to = [{
address: 'asdf@asdf.de'
}, {
address: 'asdf@asdfg.de'
}];
scope.checkSendStatus();
expect(scope.okToSend).to.be.false;
expect(scope.sendBtnText).to.be.undefined;
expect(scope.sendBtnSecure).to.be.undefined;
});
it('should be able to send securely to multiple recipients', function() {
scope.to = [{
address: 'asdf@asdf.de',
secure: true
}, {
address: 'asdf@asdfg.de',
secure: true
}];
scope.checkSendStatus();
expect(scope.okToSend).to.be.true;
expect(scope.sendBtnText).to.equal('Send securely');
expect(scope.sendBtnSecure).to.be.true;
}); });
}); });
describe('send to outbox', function() { describe('send to outbox', function() {
it('should work when offline', function(done) { it('should work when offline', function(done) {
var verifyToSpy = sinon.spy(scope, 'verifyTo'), var re = {
re = { from: [{
from: [{ address: 'pity@dafool'
address: 'pity@dafool' }],
}], subject: 'Ermahgerd!',
subject: 'Ermahgerd!', sentDate: new Date(),
sentDate: new Date(), body: 'so much body!'
body: 'so much body!' };
};
scope.state.nav = { scope.state.nav = {
currentFolder: 'currentFolder' currentFolder: 'currentFolder'
@ -160,11 +313,9 @@ define(function(require) {
scope.onError = function(err) { scope.onError = function(err) {
expect(err).to.not.exist; expect(err).to.not.exist;
expect(scope.state.writer.open).to.be.false; expect(scope.state.writer.open).to.be.false;
expect(verifyToSpy.calledOnce).to.be.true;
expect(emailDaoMock.store.calledOnce).to.be.true; expect(emailDaoMock.store.calledOnce).to.be.true;
expect(emailDaoMock.sync.calledOnce).to.be.true; expect(emailDaoMock.sync.calledOnce).to.be.true;
scope.verifyTo.restore();
done(); done();
}; };
@ -178,15 +329,14 @@ define(function(require) {
}); });
it('should work', function(done) { it('should work', function(done) {
var verifyToSpy = sinon.spy(scope, 'verifyTo'), var re = {
re = { from: [{
from: [{ address: 'pity@dafool'
address: 'pity@dafool' }],
}], subject: 'Ermahgerd!',
subject: 'Ermahgerd!', sentDate: new Date(),
sentDate: new Date(), body: 'so much body!'
body: 'so much body!' };
};
scope.state.nav = { scope.state.nav = {
currentFolder: 'currentFolder' currentFolder: 'currentFolder'
@ -196,11 +346,9 @@ define(function(require) {
scope.onError = function(err) { scope.onError = function(err) {
expect(err).to.not.exist; expect(err).to.not.exist;
expect(scope.state.writer.open).to.be.false; expect(scope.state.writer.open).to.be.false;
expect(verifyToSpy.calledOnce).to.be.true;
expect(emailDaoMock.store.calledOnce).to.be.true; expect(emailDaoMock.store.calledOnce).to.be.true;
expect(emailDaoMock.sync.calledOnce).to.be.true; expect(emailDaoMock.sync.calledOnce).to.be.true;
scope.verifyTo.restore();
done(); done();
}; };
@ -212,15 +360,14 @@ define(function(require) {
}); });
it('should fail', function(done) { it('should fail', function(done) {
var verifyToSpy = sinon.spy(scope, 'verifyTo'), var re = {
re = { from: [{
from: [{ address: 'pity@dafool'
address: 'pity@dafool' }],
}], subject: 'Ermahgerd!',
subject: 'Ermahgerd!', sentDate: new Date(),
sentDate: new Date(), body: 'so much body!'
body: 'so much body!' };
};
scope.state.nav = { scope.state.nav = {
currentFolder: 'currentFolder' currentFolder: 'currentFolder'
@ -230,11 +377,9 @@ define(function(require) {
scope.onError = function(err) { scope.onError = function(err) {
expect(err).to.exist; expect(err).to.exist;
expect(scope.state.writer.open).to.be.false; expect(scope.state.writer.open).to.be.false;
expect(verifyToSpy.calledOnce).to.be.true;
expect(emailDaoMock.store.calledOnce).to.be.true; expect(emailDaoMock.store.calledOnce).to.be.true;
expect(emailDaoMock.sync.calledOnce).to.be.true; expect(emailDaoMock.sync.calledOnce).to.be.true;
scope.verifyTo.restore();
done(); done();
}; };
@ -246,14 +391,20 @@ define(function(require) {
}); });
it('should not work and not close the write view', function(done) { it('should not work and not close the write view', function(done) {
scope.state.writer.open = true; scope.state.writer.write();
scope.to = 'a, b, c';
scope.to = [{
address: 'pity@dafool.de',
key: {
publicKey: '----- PGP Stuff -----'
}
}];
scope.body = 'asd'; scope.body = 'asd';
scope.subject = 'yaddablabla'; scope.subject = 'yaddablabla';
scope.toKey = 'Public Key'; scope.toKey = 'Public Key';
emailDaoMock.store.withArgs(sinon.match(function(mail) { emailDaoMock.store.withArgs(sinon.match(function(mail) {
return mail.from[0].address === emailAddress && mail.to.length === 3; return mail.from[0].address === emailAddress && mail.to.length === 1 && mail.receiverKeys.length === 1;
})).yields({ })).yields({
errMsg: 'snafu' errMsg: 'snafu'
}); });
@ -264,7 +415,6 @@ define(function(require) {
expect(emailDaoMock.store.calledOnce).to.be.true; expect(emailDaoMock.store.calledOnce).to.be.true;
done(); done();
}; };
scope.sendToOutbox(); scope.sendToOutbox();
}); });
}); });