From a00b8c3592202ea08097fae5ccce17f6a7e8300a Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Mon, 29 Jun 2015 08:50:00 -0300 Subject: [PATCH 1/3] test incremental save --- test/integration/server.js | 54 +++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/test/integration/server.js b/test/integration/server.js index 8dbc84b..81f8679 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -260,7 +260,7 @@ helpers.createAddresses = function(server, wallet, main, change, cb) { var storage, blockchainExplorer; -var useMongo = false; +var useMongo = true; function initStorage(cb) { function getDb(cb) { @@ -1184,6 +1184,58 @@ describe('Wallet service', function() { }); }); }); + it.only('should save preferences incrementally', function(done) { + async.series([ + + function(next) { + server.savePreferences({ + email: 'dummy@dummy.com', + }, next); + }, + function(next) { + server.getPreferences({}, function(err, preferences) { + should.not.exist(err); + should.exist(preferences); + preferences.email.should.equal('dummy@dummy.com'); + should.not.exist(preferences.language); + next(); + }); + }, + function(next) { + server.savePreferences({ + language: 'es', + }, next); + }, + function(next) { + server.getPreferences({}, function(err, preferences) { + should.not.exist(err); + should.exist(preferences); + preferences.language.should.equal('es'); + preferences.email.should.equal('dummy@dummy.com'); + next(); + }); + }, + function(next) { + server.savePreferences({ + language: null, + unit: 'bit', + }, next); + }, + function(next) { + server.getPreferences({}, function(err, preferences) { + should.not.exist(err); + should.exist(preferences); + preferences.unit.should.equal('bit'); + should.not.exist(preferences.language); + preferences.email.should.equal('dummy@dummy.com'); + next(); + }); + }, + ], function(err) { + should.not.exist(err); + done(); + }); + }); it.skip('should save preferences only for requesting wallet', function(done) {}); it('should validate entries', function(done) { var invalid = [{ From 116bea1aa5d3617f0626242a2c017f456fadd11a Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Mon, 29 Jun 2015 08:57:53 -0300 Subject: [PATCH 2/3] ignore unrecognized preferences --- lib/server.js | 2 ++ test/integration/server.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/server.js b/lib/server.js index 7706b11..1509be6 100644 --- a/lib/server.js +++ b/lib/server.js @@ -479,6 +479,8 @@ WalletService.prototype.savePreferences = function(opts, cb) { }, }]; + opts = _.pick(opts, _.pluck(preferences, 'name')); + try { _.each(preferences, function(preference) { var value = opts[preference.name]; diff --git a/test/integration/server.js b/test/integration/server.js index 81f8679..5d6590d 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -1158,6 +1158,7 @@ describe('Wallet service', function() { email: 'dummy@dummy.com', language: 'es', unit: 'bit', + dummy: 'ignored', }, function(err) { should.not.exist(err); server.getPreferences({}, function(err, preferences) { @@ -1166,6 +1167,7 @@ describe('Wallet service', function() { preferences.email.should.equal('dummy@dummy.com'); preferences.language.should.equal('es'); preferences.unit.should.equal('bit'); + should.not.exist(preferences.dummy); done(); }); }); From fb0dcee054117576dbfde8d2a9a2a93e12e4618f Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Mon, 29 Jun 2015 09:11:03 -0300 Subject: [PATCH 3/3] combine new preferences with stored preferences --- lib/server.js | 21 +++++++++++---------- test/integration/server.js | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/server.js b/lib/server.js index 1509be6..5871d7a 100644 --- a/lib/server.js +++ b/lib/server.js @@ -480,7 +480,6 @@ WalletService.prototype.savePreferences = function(opts, cb) { }]; opts = _.pick(opts, _.pluck(preferences, 'name')); - try { _.each(preferences, function(preference) { var value = opts[preference.name]; @@ -495,15 +494,17 @@ WalletService.prototype.savePreferences = function(opts, cb) { } self._runLocked(cb, function(cb) { - var preferences = Model.Preferences.create({ - walletId: self.walletId, - copayerId: self.copayerId, - email: opts.email, - language: opts.language, - unit: opts.unit, - }); - self.storage.storePreferences(preferences, function(err) { - return cb(err); + self.storage.fetchPreferences(self.walletId, self.copayerId, function(err, oldPref) { + if (err) return cb(err); + + var newPref = Model.Preferences.create({ + walletId: self.walletId, + copayerId: self.copayerId, + }); + var preferences = Model.Preferences.fromObj(_.defaults(newPref, opts, oldPref)); + self.storage.storePreferences(preferences, function(err) { + return cb(err); + }); }); }); }; diff --git a/test/integration/server.js b/test/integration/server.js index 5d6590d..98cc5c3 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -260,7 +260,7 @@ helpers.createAddresses = function(server, wallet, main, change, cb) { var storage, blockchainExplorer; -var useMongo = true; +var useMongo = false; function initStorage(cb) { function getDb(cb) { @@ -1186,7 +1186,7 @@ describe('Wallet service', function() { }); }); }); - it.only('should save preferences incrementally', function(done) { + it('should save preferences incrementally', function(done) { async.series([ function(next) {