Fixing Identity test
This commit is contained in:
parent
88459c74bb
commit
3e5ccabc00
5 changed files with 57 additions and 261 deletions
268
test/Identity.js
268
test/Identity.js
|
|
@ -25,7 +25,7 @@ function assertObjectEqual(a, b) {
|
|||
}
|
||||
|
||||
|
||||
describe('Identity model', function() {
|
||||
describe.only('Identity model', function() {
|
||||
var wallet;
|
||||
var email = 'hola@hola.com';
|
||||
var password = 'password';
|
||||
|
|
@ -126,8 +126,7 @@ describe('Identity model', function() {
|
|||
});
|
||||
});
|
||||
|
||||
describe.only('#open', function(done) {
|
||||
|
||||
describe('#open', function(done) {
|
||||
it('should return last focused wallet', function(done) {
|
||||
var wallets = [{
|
||||
id: 'wallet1',
|
||||
|
|
@ -151,221 +150,93 @@ describe('Identity model', function() {
|
|||
});
|
||||
|
||||
describe('#store', function() {
|
||||
it('should call .store for identity and wallets', function(done) {
|
||||
var args = createIdentity();
|
||||
Identity.create(args.params, function(err, identity) {
|
||||
|
||||
it('should call .store from profile and no wallets', function(done) {
|
||||
profile.store = sinon.stub().yields(null);
|
||||
iden.wallets = [];
|
||||
iden.store({}, function(err) {
|
||||
should.not.exist(err);
|
||||
profile.store.calledOnce.should.equal(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
args.storage.setItem = sinon.stub();
|
||||
args.storage.setItem.onFirstCall().callsArg(2);
|
||||
|
||||
var wallet1 = {}, wallet2 = {};
|
||||
identity.storeWallet = sinon.stub();
|
||||
identity.storeWallet.onFirstCall().callsArg(1);
|
||||
identity.storeWallet.onSecondCall().callsArg(1);
|
||||
identity.wallets = {'a': wallet1, 'b': wallet2};
|
||||
|
||||
identity.store({}, function(err) {
|
||||
should.not.exist(err);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should call .store from profile and wallets (2)', function(done) {
|
||||
iden.profile.store = sinon.stub().yields(null);
|
||||
iden.openWallets = [{
|
||||
store: sinon.stub().yields(null)
|
||||
}, {
|
||||
store: sinon.stub().yields(null)
|
||||
}];
|
||||
iden.store({}, function(err) {
|
||||
should.not.exist(err);
|
||||
iden.profile.store.calledOnce.should.equal(true);
|
||||
iden.openWallets[0].store.calledOnce.should.equal(true);
|
||||
iden.openWallets[1].store.calledOnce.should.equal(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#createWallet', function() {
|
||||
it('should create wallet', function(done) {
|
||||
iden.createWallet(null, function(err, w) {
|
||||
should.exist(w);
|
||||
should.not.exist(err);
|
||||
|
||||
var iden = null;
|
||||
var args = null;
|
||||
|
||||
beforeEach(function(done) {
|
||||
args = createIdentity();
|
||||
Identity.create(args.params, function(err, identity) {
|
||||
iden = identity;
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should add wallet to profile', function(done) {
|
||||
iden.createWallet(null, function(err, w) {
|
||||
profile.addWallet.getCall(0).args[0].should.contain('wid:123');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('should be able to create wallets with given pk', function(done) {
|
||||
var priv = 'tprv8ZgxMBicQKsPdEqHcA7RjJTayxA3gSSqeRTttS1JjVbgmNDZdSk9EHZK5pc52GY5xFmwcakmUeKWUDzGoMLGAhrfr5b3MovMUZUTPqisL2m';
|
||||
args.storage.setItem = sinon.stub();
|
||||
args.storage.setItem.onFirstCall().callsArg(2);
|
||||
args.storage.setItem.onSecondCall().callsArg(2);
|
||||
iden.createWallet({
|
||||
privateKeyHex: priv,
|
||||
}, function(err, w) {
|
||||
Identity._newWallet.getCall(1).args[0].privateKey.toObj().extendedPrivateKeyString.should.equal(priv);
|
||||
should.not.exist(err);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should be able to create wallets with random pk', function(done) {
|
||||
args.storage.setItem = sinon.stub();
|
||||
args.storage.setItem.onCall(0).callsArg(2);
|
||||
args.storage.setItem.onCall(1).callsArg(2);
|
||||
args.storage.setItem.onCall(2).callsArg(2);
|
||||
args.storage.setItem.onCall(3).callsArg(2);
|
||||
iden.createWallet(null, function(err, w1) {
|
||||
should.exist(w1);
|
||||
iden.createWallet(null, function(err, w2) {
|
||||
Identity._newWallet.getCall(0).args[0].privateKey.toObj().extendedPrivateKeyString.should.not.equal(
|
||||
Identity._newWallet.getCall(1).args[0].privateKey.toObj().extendedPrivateKeyString
|
||||
);
|
||||
should.exist(w2);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('#deleteWallet', function() {
|
||||
it('should call profile and wallet', function(done) {
|
||||
iden.createWallet(null, function(err, w) {
|
||||
iden.deleteWallet(w.id, function(err) {
|
||||
describe('#retrieveWalletFromStorage', function() {
|
||||
it('should return wallet', function(done) {
|
||||
var args = createIdentity();
|
||||
args.storage.getItem.onFirstCall().callsArgWith(1, null, '{"wallet": "fakeData"}');
|
||||
var backup = Wallet.fromUntrustedObj;
|
||||
Wallet.fromUntrustedObj = sinon.stub().returns(args.wallet);
|
||||
Identity.create(args.params, function(err, iden) {
|
||||
iden.retrieveWalletFromStorage('dummy', function(err, wallet) {
|
||||
should.not.exist(err);
|
||||
should.exist(wallet);
|
||||
Wallet.fromUntrustedObj = backup;
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#openWallet', function() {
|
||||
it('should return wallet and call .store & .migrateWallet', function(done) {
|
||||
iden.openWallet('dummy', function(err, w) {
|
||||
should.not.exist(err);
|
||||
w.store.calledOnce.should.equal(true);
|
||||
// iden.migrateWallet.calledOnce.should.equal(true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#importWallet', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
iden.migrateWallet = sinon.stub().yields(null);
|
||||
storage.getFirst = sinon.stub().yields(null, 'wallet1234');
|
||||
});
|
||||
|
||||
it('should create wallet from encrypted object', function(done) {
|
||||
iden.storage.setPassphrase = sinon.spy();
|
||||
iden.storage.decrypt = sinon.stub().withArgs('base64').returns({
|
||||
networkName: 'testnet'
|
||||
});
|
||||
|
||||
wallet.getId = sinon.stub().returns('ID123');
|
||||
Identity._walletFromObj = sinon.stub().returns(wallet);
|
||||
Identity._walletRead = sinon.stub().yields(null, wallet);
|
||||
|
||||
iden.importWallet("encrypted object", "xxx", [], function(err) {
|
||||
iden.openWallet('ID123', function(err, w) {
|
||||
should.not.exist(err);
|
||||
should.exist(w);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#listWallets', function() {
|
||||
it('should return empty array if no wallets', function() {
|
||||
iden.listWallets();
|
||||
iden.profile.listWallets.calledOnce.should.equal(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('#deleteWallet', function() {
|
||||
Identity._walletDelete = sinon.stub().callsArgWith(2, null);
|
||||
|
||||
it('should call Profile deleteWallet', function(done) {
|
||||
iden.profile.deleteWallet = sinon.stub().yields(null);
|
||||
iden.deleteWallet('xxx', function() {
|
||||
iden.profile.deleteWallet.getCall(0).args[0].should.equal('xxx');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
describe('#export', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
var ws = [];
|
||||
_.each([0, 1, 2, 3, 4], function(i) {
|
||||
var w = sinon.stub();
|
||||
w.export = sinon.stub().returns('enc' + i);
|
||||
w.getId = sinon.stub().returns('wid' + i);
|
||||
ws.push(w);
|
||||
});
|
||||
iden.openWallets = ws;
|
||||
iden.profile.export = sinon.stub().returns('penc');
|
||||
iden.storage.iterations = 13;
|
||||
});
|
||||
|
||||
it('should create an encrypted object', function() {
|
||||
var ret = JSON.parse(iden.exportAsJson());
|
||||
ret.iterations.should.equal(13);
|
||||
ret.profile.should.equal('penc');
|
||||
_.each([0, 1, 2, 3, 4], function(i) {
|
||||
ret.wallets['wid' + i].should.equal('enc' + i);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('#import', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
var ws = [];
|
||||
_.each([0, 1, 2, 3, 4], function(i) {
|
||||
var w = sinon.stub();
|
||||
w.export = sinon.stub().returns('enc' + i);
|
||||
w.getId = sinon.stub().returns('wid' + i);
|
||||
ws.push(w);
|
||||
});
|
||||
iden.openWallets = ws;
|
||||
iden.profile.export = sinon.stub().returns('penc');
|
||||
iden.storage.iterations = 13;
|
||||
iden.storage.decrypt = sinon.stub().returns({
|
||||
email: '1@1.com',
|
||||
hash: 'hash1234'
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
it('should check the import string', function(done) {
|
||||
// Identity.importFromJson(JSON.stringify({
|
||||
// profile: '1234'
|
||||
// }), '1234', config, function(err, ret) {
|
||||
// err.should.contain('BADSTR');
|
||||
// done();
|
||||
// });
|
||||
});
|
||||
|
||||
|
||||
it('should check the import string 2', function(done) {
|
||||
// Identity.importFromJson(JSON.stringify({
|
||||
// iterations: 10,
|
||||
// }), '1234', config, function(err, ret) {
|
||||
// err.should.contain('BADSTR');
|
||||
// done();
|
||||
// });
|
||||
});
|
||||
|
||||
it('should import a simple wallet', function(done) {
|
||||
// Identity.importFromJson(JSON.stringify({
|
||||
// iterations: 10,
|
||||
// profile: '1234'
|
||||
// }), '1234', config, function(err, iden) {
|
||||
// should.not.exist(err);
|
||||
// should.exist(iden);
|
||||
// iden.profile.email.should.equal('1@1.com');
|
||||
// done();
|
||||
//});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
@ -424,6 +295,7 @@ describe('Identity model', function() {
|
|||
});
|
||||
|
||||
opts.privHex = undefined;
|
||||
opts.Async = net;
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
err.should.equal('badNetwork');
|
||||
done();
|
||||
|
|
@ -449,7 +321,6 @@ describe('Identity model', function() {
|
|||
};
|
||||
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
err.should.equal('joinError');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
|
@ -457,78 +328,35 @@ describe('Identity model', function() {
|
|||
|
||||
it('should call network.start / create', function(done) {
|
||||
opts.privHex = undefined;
|
||||
var net = sinon.stub();
|
||||
net.cleanUp = sinon.spy();
|
||||
net.greet = sinon.spy();
|
||||
net.start = sinon.stub().yields(null);
|
||||
|
||||
net.on = sinon.stub();
|
||||
net.on.withArgs('connected').yields(null);
|
||||
net.on.withArgs('data').yields('senderId', {
|
||||
type: 'walletId',
|
||||
networkName: 'testnet',
|
||||
opts: {},
|
||||
});
|
||||
Identity._newAsync = function() {
|
||||
return net;
|
||||
};
|
||||
|
||||
var w = sinon.stub();
|
||||
w.sendWalletReady = sinon.spy();
|
||||
iden.createWallet = sinon.stub().yields(null, w);
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
net.start.calledOnce.should.equal(true);
|
||||
iden.createWallet.calledOnce.should.equal(true);
|
||||
iden.createWallet.calledOnce.should.equal(true);
|
||||
|
||||
w.sendWalletReady.calledOnce.should.equal(true);
|
||||
w.sendWalletReady.getCall(0).args[0].should.equal('03ddbc4711534bc62ccf576ab05f2a0afd11f9e2f4016781f3f5a88de9543a229a');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should return walletFull', function(done) {
|
||||
opts.privHex = undefined;
|
||||
var net = sinon.stub();
|
||||
net.cleanUp = sinon.spy();
|
||||
net.greet = sinon.spy();
|
||||
net.start = sinon.stub().yields(null);
|
||||
|
||||
net.on = sinon.stub();
|
||||
net.on.withArgs('connected').yields(null);
|
||||
net.on.withArgs('data').yields('senderId', {
|
||||
type: 'walletId',
|
||||
networkName: 'testnet',
|
||||
opts: {},
|
||||
});
|
||||
Identity._newAsync = function() {
|
||||
return net;
|
||||
};
|
||||
iden.createWallet = sinon.stub().yields(null, null);
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
err.should.equal('walletFull');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should accept a priv key a input', function() {
|
||||
opts.privHex = 'tprv8ZgxMBicQKsPf7MCvCjnhnr4uiR2Z2gyNC27vgd9KUu98F9mM1tbaRrWMyddVju36GxLbeyntuSadBAttriwGGMWUkRgVmUUCg5nFioGZsd';
|
||||
var net = sinon.stub();
|
||||
Identity._newAsync = function() {
|
||||
return net;
|
||||
};
|
||||
net.on = sinon.stub();
|
||||
|
||||
net.cleanUp = sinon.spy();
|
||||
net.start = sinon.spy();
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
net.start.getCall(0).args[0].privkey.should.equal('ddc2fa8c583a73c4b2a24630ec7c283df4e7c230a02c4e48bc36ec61687afd7d');
|
||||
});
|
||||
});
|
||||
it('should call network.start with private key', function(done) {
|
||||
opts.privHex = undefined;
|
||||
iden.joinWallet(opts, function(err, w) {
|
||||
net.start.getCall(0).args[0].privkey.length.should.equal(64); //privkey is hex of private key buffer
|
||||
console.error(err);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue