diff --git a/js/controllers/sidebar.js b/js/controllers/sidebar.js index c7e760da7..f07c1987a 100644 --- a/js/controllers/sidebar.js +++ b/js/controllers/sidebar.js @@ -75,14 +75,16 @@ angular.module('copayApp.controllers').controller('SidebarController', } $scope.checkIfWarning = function() { - if (!$rootScope.wallet.isLocked) { + if ($rootScope.wallet && !$rootScope.wallet.isLocked) { controllerUtils.redirIfLogged(); } }; $scope.ignoreLocked = function() { - $rootScope.wallet.isLocked = false; - controllerUtils.redirIfLogged(); + if ($rootScope.wallet) { + $rootScope.wallet.isLocked = false; + controllerUtils.redirIfLogged(); + } }; }); diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 8302cbabe..b3ef6fb56 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -43,6 +43,7 @@ function Wallet(opts) { this.id = opts.id || Wallet.getRandomId(); this.name = opts.name; + this.isLocked = false; this.verbose = opts.verbose; this.publicKeyRing.walletId = this.id; @@ -431,7 +432,6 @@ Wallet.prototype.netStart = function(callback) { var self = this; var net = this.network; - this._checkLocked(); net.removeAllListeners(); net.on('connect', self._handleConnect.bind(self)); @@ -464,6 +464,7 @@ Wallet.prototype.netStart = function(callback) { self.scheduleConnect(); self.emit('txProposalsUpdated'); }, 10); + self._checkLocked(); }); }; @@ -1017,6 +1018,9 @@ Wallet.prototype.indexDiscovery = function(start, change, cosigner, gap, cb) { Wallet.prototype.disconnect = function() { this.log('## DISCONNECTING'); + if (!this.isLocked) { + this.closeIfOpen(); + } this.network.disconnect(); }; diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js index 1db1417eb..cf6130b9e 100644 --- a/js/services/controllerUtils.js +++ b/js/services/controllerUtils.js @@ -21,10 +21,7 @@ angular.module('copayApp.services') } }; - root.logout = function() { - if (!$rootScope.wallet.isLocked) { - $rootScope.wallet.closeIfOpen(); - } + root.logout = function() { Socket.removeAllListeners(); $rootScope.wallet = null; diff --git a/test/mocks/FakeStorage.js b/test/mocks/FakeStorage.js index c7d86f3c1..b6c94d2fd 100644 --- a/test/mocks/FakeStorage.js +++ b/test/mocks/FakeStorage.js @@ -27,6 +27,18 @@ FakeStorage.prototype.getLastOpened = function() { return this.storage['lastOpened']; }; +FakeStorage.prototype.setIsOpen = function(id) { + this.storage[id + '::isOpen'] = true; +} + +FakeStorage.prototype.getIsOpen = function(id) { + return this.storage[id + '::isOpen']; +} + +FakeStorage.prototype.removeIsOpen = function(id) { + delete this[id + '::isOpen']; +} + FakeStorage.prototype.removeGlobal = function(id) { delete this.storage[id]; }; diff --git a/test/mocks/FakeWallet.js b/test/mocks/FakeWallet.js index bdca60a5c..48b4af4a6 100644 --- a/test/mocks/FakeWallet.js +++ b/test/mocks/FakeWallet.js @@ -4,6 +4,7 @@ var FakeWallet = function() { this.safeBalance = 1000; this.totalCopayers = 2; this.requiredCopayers = 2; + this.isLocked = false; this.balanceByAddr = { '1CjPR7Z5ZSyWk6WtXvSFgkptmpoi4UM9BC': 1000 }; diff --git a/test/test.Wallet.js b/test/test.Wallet.js index fad38aff6..accd28cb9 100644 --- a/test/test.Wallet.js +++ b/test/test.Wallet.js @@ -1022,6 +1022,14 @@ describe('Wallet model', function() { w.netStart(); w.network.start.getCall(0).args[0].privkey.length.should.equal(64); }); + + it('should check if wallet is already opened', function() { + var w = createW(); + w._checkLocked(); + w.isLocked.should.equal(false); + w._checkLocked(); + w.isLocked.should.equal(true); + }); }); describe('#forceNetwork in config', function() { diff --git a/test/unit/controllers/controllersSpec.js b/test/unit/controllers/controllersSpec.js index 9a8447000..faead7aeb 100644 --- a/test/unit/controllers/controllersSpec.js +++ b/test/unit/controllers/controllersSpec.js @@ -288,8 +288,10 @@ describe("Unit: Controllers", function() { describe("Unit: Sidebar Controller", function() { var rootScope; beforeEach(inject(function($controller, $rootScope) { - rootScope = $rootScope; scope = $rootScope.$new(); + rootScope = $rootScope; + rootScope.wallet = new FakeWallet(config); + headerCtrl = $controller('SidebarController', { $scope: scope, }); @@ -301,6 +303,11 @@ describe("Unit: Controllers", function() { expect(array.length).equal(n); }); + it('should ignore if wallet is locked', function() { + scope.ignoreLocked(); + expect(rootScope.wallet.isLocked).equal(false); + }); + }); describe('Send Controller', function() {