diff --git a/lib/server.js b/lib/server.js index 3e191f4..ec64863 100644 --- a/lib/server.js +++ b/lib/server.js @@ -423,11 +423,28 @@ WalletService.prototype.joinWallet = function(opts, cb) { self.storage.storeWalletAndUpdateCopayersLookup(wallet, function(err) { if (err) return cb(err); - self._notify('NewCopayer', { - walletId: opts.walletId, - copayerId: copayer.id, - copayerName: copayer.name, - }, function() { + + async.parallel([ + + function(done) { + self._notify('NewCopayer', { + walletId: opts.walletId, + copayerId: copayer.id, + copayerName: copayer.name, + }, done); + }, + function(done) { + if (wallet.isComplete() && wallet.isShared()) { + self._notify('WalletComplete', { + walletId: opts.walletId, + }, { + isGlobal: true + }, done); + } else { + done(); + } + }, + ], function() { return cb(null, { copayerId: copayer.id, wallet: wallet diff --git a/test/integration/server.js b/test/integration/server.js index 4cf42a4..20d38df 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -478,7 +478,22 @@ describe('Wallet service', function() { var copayer = wallet.copayers[0]; copayer.name.should.equal('me'); copayer.id.should.equal(copayerId); - done(); + server.getNotifications({}, function(err, notifications) { + should.not.exist(err); + var notif = _.find(notifications, { + type: 'NewCopayer' + }); + should.exist(notif); + notif.data.walletId.should.equal(walletId); + notif.data.copayerId.should.equal(copayerId); + notif.data.copayerName.should.equal('me'); + + notif = _.find(notifications, { + type: 'WalletComplete' + }); + should.not.exist(notif); + done(); + }); }); }); }); @@ -548,7 +563,7 @@ describe('Wallet service', function() { }); }); - it('should fail two wallets with same xPubKey', function(done) { + it('should fail to join two wallets with same xPubKey', function(done) { var copayerOpts = helpers.getSignedCopayerOpts({ walletId: walletId, name: 'me', @@ -630,6 +645,27 @@ describe('Wallet service', function() { should.not.exist(err); wallet.status.should.equal('complete'); wallet.publicKeyRing.length.should.equal(3); + server.getNotifications({}, function(err, notifications) { + should.not.exist(err); + var notif = _.find(notifications, { + type: 'WalletComplete' + }); + should.exist(notif); + notif.data.walletId.should.equal(wallet.id); + done(); + }); + }); + }); + }); + + it('should not notify WalletComplete if 1-of-1', function(done) { + helpers.createAndJoinWallet(1, 1, function(server) { + server.getNotifications({}, function(err, notifications) { + should.not.exist(err); + var notif = _.find(notifications, { + type: 'WalletComplete' + }); + should.not.exist(notif); done(); }); });