fix address event subscription

This commit is contained in:
Matias Alejo Garcia 2014-06-25 11:12:38 -03:00
parent 88e6ea9f40
commit 792f48b2ea
4 changed files with 98 additions and 61 deletions

View File

@ -1,5 +1,4 @@
'use strict'; 'use strict';
var imports = require('soop').imports(); var imports = require('soop').imports();
var http = require('http'); var http = require('http');

View File

@ -130,7 +130,6 @@ angular.module('copayApp.services')
}); });
w.on('publicKeyRingUpdated', function(dontDigest) { w.on('publicKeyRingUpdated', function(dontDigest) {
root.updateAddressList();
root.setSocketHandlers(); root.setSocketHandlers();
if (!dontDigest) { if (!dontDigest) {
$rootScope.$digest(); $rootScope.$digest();
@ -184,7 +183,8 @@ angular.module('copayApp.services')
root.updateAddressList = function() { root.updateAddressList = function() {
var w = $rootScope.wallet; var w = $rootScope.wallet;
$rootScope.addrInfos = w.getAddressesInfo(); if (w)
$rootScope.addrInfos = w.getAddressesInfo();
}; };
root.updateBalance = function(cb) { root.updateBalance = function(cb) {
@ -289,6 +289,7 @@ angular.module('copayApp.services')
}; };
root.setSocketHandlers = function() { root.setSocketHandlers = function() {
root.updateAddressList();
if (!Socket.sysEventsSet) { if (!Socket.sysEventsSet) {
Socket.sysOn('error', root._setCommError); Socket.sysOn('error', root._setCommError);
Socket.sysOn('reconnect_error', root._setCommError); Socket.sysOn('reconnect_error', root._setCommError);
@ -315,7 +316,7 @@ angular.module('copayApp.services')
Socket.on(a.addressStr, function(txid) { Socket.on(a.addressStr, function(txid) {
if (!a.isChange) if (!a.isChange)
notification.funds('Received fund', a.addressStr); notification.funds('Funds received!', a.addressStr);
root.updateBalance(function() { root.updateBalance(function() {
$rootScope.$digest(); $rootScope.$digest();

View File

@ -27,6 +27,7 @@ FakeWallet.prototype.getAddressesInfo = function() {
for (var ii in this.balanceByAddr) { for (var ii in this.balanceByAddr) {
ret.push({ ret.push({
address: ii, address: ii,
addressStr: ii,
isChange: false, isChange: false,
}); });
} }

View File

@ -70,72 +70,108 @@ describe("Unit: Walletfactory Service", function() {
}); });
describe("Unit: controllerUtils", function() { describe("Unit: controllerUtils", function() {
beforeEach(angular.mock.module('copayApp.services')); beforeEach(angular.mock.module('copayApp.services'));
it('should updateBalance in bits', inject(function(controllerUtils, $rootScope) { it('should updateBalance in bits', inject(function(controllerUtils, $rootScope) {
expect(controllerUtils.updateBalance).not.to.equal(null); expect(controllerUtils.updateBalance).not.to.equal(null);
scope = $rootScope.$new(); scope = $rootScope.$new();
$rootScope.wallet = new FakeWallet(); $rootScope.wallet = new FakeWallet();
var addr = '1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC'; var Waddr = Object.keys($rootScope.wallet.balanceByAddr)[0];
var a = {}; var a = {};
a[addr] = 100; a[Waddr] = 100;
//SATs //SATs
$rootScope.wallet.set(100000001, 90000002, a); $rootScope.wallet.set(100000001, 90000002, a);
//retuns values in DEFAULT UNIT(bits) //retuns values in DEFAULT UNIT(bits)
controllerUtils.updateBalance(function() { controllerUtils.updateBalance(function() {
expect($rootScope.totalBalanceBTC).to.be.equal('1.0000'); expect($rootScope.totalBalanceBTC).to.be.equal('1.0000');
expect($rootScope.availableBalanceBTC).to.be.equal('0.9000'); expect($rootScope.availableBalanceBTC).to.be.equal('0.9000');
expect($rootScope.totalBalance).to.be.equal(1000000.01); expect($rootScope.totalBalance).to.be.equal(1000000.01);
expect($rootScope.availableBalance).to.be.equal(900000.02); expect($rootScope.availableBalance).to.be.equal(900000.02);
expect($rootScope.addrInfos).not.to.equal(null); expect($rootScope.addrInfos).not.to.equal(null);
expect($rootScope.addrInfos[0].address).to.equal(addr); expect($rootScope.addrInfos[0].address).to.equal(Waddr);
});
}));
it('should set the rootScope', inject(function(controllerUtils, $rootScope) {
controllerUtils.setupRootVariables(function() {
expect($rootScope.txAlertCount).to.be.equal(0);
expect($rootScope.insightError).to.be.equal(0);
expect($rootScope.isCollapsed).to.be.equal(0);
expect($rootScope.unitName).to.be.equal('bits');
});
}));
}); });
}));
describe("Unit: Notification Service", function() { it('should set the rootScope', inject(function(controllerUtils, $rootScope) {
beforeEach(angular.mock.module('copayApp.services')); controllerUtils.setupRootVariables(function() {
it('should contain a notification service', inject(function(notification) { expect($rootScope.txAlertCount).to.be.equal(0);
expect(notification).not.to.equal(null); expect($rootScope.insightError).to.be.equal(0);
})); expect($rootScope.isCollapsed).to.be.equal(0);
}); expect($rootScope.unitName).to.be.equal('bits');
});
}));
describe("Unit: controllerUtils #setSocketHandlers", function() {
describe("Unit: Backup Service", function() {
beforeEach(angular.mock.module('copayApp.services'));
it('should contain a backup service', inject(function(backupService) {
expect(backupService).not.to.equal(null);
}));
it('should backup in file', inject(function(backupService) {
var mock = sinon.mock(window);
var expectation = mock.expects('saveAs');
backupService.download(new FakeWallet());
expectation.once();
}));
});
describe("Unit: isMobile Service", function() { it(' should call updateAddressList ', inject(function(controllerUtils, $rootScope) {
beforeEach(angular.mock.module('copayApp.services')); var spy = sinon.spy(controllerUtils, 'updateAddressList');
it('should contain a isMobile service', inject(function(isMobile) { controllerUtils.setSocketHandlers();
expect(isMobile).not.to.equal(null); sinon.assert.callCount(spy, 1);
})); }));
it('should not detect mobile by default', inject(function(isMobile) {
isMobile.any().should.equal(false); it('should update addresses', inject(function(controllerUtils, $rootScope) {
$rootScope.wallet = new FakeWallet();
var Waddr = Object.keys($rootScope.wallet.balanceByAddr)[0];
controllerUtils.setSocketHandlers();
expect($rootScope.addrInfos[0].address).to.be.equal(Waddr);;
})); }));
it('should detect mobile if user agent is Android', inject(function(isMobile) {
navigator.__defineGetter__('userAgent', function() { it('should set System Event Handlers', inject(function(controllerUtils, $rootScope, Socket) {
return 'Android 2.2.3'; var spy = sinon.spy(Socket, 'sysOn');
$rootScope.wallet = new FakeWallet();
controllerUtils.setSocketHandlers();
sinon.assert.callCount(spy, 5);
['error', 'reconnect_error', 'reconnect_failed', 'connect', 'reconnect'].forEach(function(e) {
sinon.assert.calledWith(spy, e);
}); });
isMobile.any().should.equal(true); }));
it('should set Address Event Handlers', inject(function(controllerUtils, $rootScope, Socket) {
var spy = sinon.spy(Socket, 'on');
$rootScope.wallet = new FakeWallet();
var Waddr = Object.keys($rootScope.wallet.balanceByAddr)[0];
controllerUtils.setSocketHandlers();
sinon.assert.calledWith(spy, Waddr);
})); }));
}); });
});
describe("Unit: Notification Service", function() {
beforeEach(angular.mock.module('copayApp.services'));
it('should contain a notification service', inject(function(notification) {
expect(notification).not.to.equal(null);
}));
});
describe("Unit: Backup Service", function() {
beforeEach(angular.mock.module('copayApp.services'));
it('should contain a backup service', inject(function(backupService) {
expect(backupService).not.to.equal(null);
}));
it('should backup in file', inject(function(backupService) {
var mock = sinon.mock(window);
var expectation = mock.expects('saveAs');
backupService.download(new FakeWallet());
expectation.once();
}));
});
describe("Unit: isMobile Service", function() {
beforeEach(angular.mock.module('copayApp.services'));
it('should contain a isMobile service', inject(function(isMobile) {
expect(isMobile).not.to.equal(null);
}));
it('should not detect mobile by default', inject(function(isMobile) {
isMobile.any().should.equal(false);
}));
it('should detect mobile if user agent is Android', inject(function(isMobile) {
navigator.__defineGetter__('userAgent', function() {
return 'Android 2.2.3';
});
isMobile.any().should.equal(true);
}));
});