mirror of
https://github.com/moparisthebest/mail
synced 2024-11-22 17:02:17 -05:00
fix tests
This commit is contained in:
parent
9bb70fac5d
commit
0dc1cc68bc
@ -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
|
||||||
|
@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user