Merge pull request #264 from isocolsky/ref/preferences

Incremental preferences
This commit is contained in:
Matias Alejo Garcia 2015-06-29 09:38:14 -03:00
commit 4552d3e524
2 changed files with 66 additions and 9 deletions

View File

@ -480,6 +480,7 @@ WalletService.prototype.savePreferences = function(opts, cb) {
},
}];
opts = _.pick(opts, _.pluck(preferences, 'name'));
try {
_.each(preferences, function(preference) {
var value = opts[preference.name];
@ -494,15 +495,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);
});
});
});
};

View File

@ -1160,6 +1160,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) {
@ -1168,6 +1169,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();
});
});
@ -1186,6 +1188,58 @@ describe('Wallet service', function() {
});
});
});
it('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 = [{