Skip to content

Commit

Permalink
expose _change method for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
pickypg committed Feb 2, 2018
1 parent 62b8a04 commit 78c2a8d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 13 deletions.
29 changes: 21 additions & 8 deletions src/ui/public/config/__tests__/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,6 @@ describe('config component', function () {
expect(config.set).withArgs('unrecognizedProperty', 'somevalue').to.not.throwException();
expect(config.get('unrecognizedProperty')).to.be('somevalue');
});

// there is currently no way to make it return false without significant changes to the code
it('returns true for success', async () => {
expect(await config.set('random', 'value')).to.be(true);
// setting to the same should set it to true as well
expect(await config.set('random', 'value')).to.be(true);
});
});

describe('#$bind', function () {
Expand All @@ -74,7 +67,7 @@ describe('config component', function () {
expect($scope).to.have.property('dateFormat', dateFormat);
});

it('alows overriding the property name', function () {
it('allows overriding the property name', function () {
const dateFormat = config.get('dateFormat');
config.bindToScope($scope, 'dateFormat', 'defaultDateFormat');
expect($scope).to.not.have.property('dateFormat');
Expand All @@ -95,4 +88,24 @@ describe('config component', function () {

});

describe('#_change', () => {

it('returns true for success', async () => {
// immediately resolve to avoid timing issues
const delayedUpdate = Promise.resolve();

expect(await config._change('random', 'value', { _delayedUpdate: delayedUpdate })).to.be(true);
// setting to the same should set it to true as well
expect(await config._change('random', 'value')).to.be(true);
});

it('returns false for failure', async () => {
// immediately resolve to avoid timing issues
const delayedUpdate = Promise.reject();

expect(await config._change('random', 'value', { _delayedUpdate: delayedUpdate })).to.be(false);
});

});

});
10 changes: 5 additions & 5 deletions src/ui/public/config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ module.service(`config`, function (Private, $rootScope, chrome, uiSettings) {

config.getAll = () => cloneDeep(settings);
config.get = (key, defaultValue) => getCurrentValue(key, defaultValue);
config.set = (key, val) => change(key, isPlainObject(val) ? angular.toJson(val) : val);
config.remove = key => change(key, null);
config.set = (key, val) => config._change(key, isPlainObject(val) ? angular.toJson(val) : val);
config.remove = key => config._change(key, null);
config.isDeclared = key => key in settings;
config.isDefault = key => !config.isDeclared(key) || nullOrEmpty(settings[key].userValue);
config.isCustom = key => config.isDeclared(key) && !('value' in settings[key]);
Expand Down Expand Up @@ -57,7 +57,7 @@ any custom setting configuration watchers for "${key}" may fix this issue.`);
return scope.$on(`change:config`, update);
}

function change(key, value) {
config._change = (key, value, { _delayedUpdate = delayedUpdate }) => {
const declared = config.isDeclared(key);
const oldVal = declared ? settings[key].userValue : undefined;
const newVal = key in defaults && defaults[key].defaultValue === value ? null : value;
Expand All @@ -68,7 +68,7 @@ any custom setting configuration watchers for "${key}" may fix this issue.`);
const initialVal = declared ? config.get(key) : undefined;
localUpdate(key, newVal, initialVal);

return delayedUpdate(key, newVal)
return _delayedUpdate(key, newVal)
.then(updatedSettings => {
settings = mergeSettings(defaults, updatedSettings);
return true;
Expand All @@ -78,7 +78,7 @@ any custom setting configuration watchers for "${key}" may fix this issue.`);
notify.error(reason);
return false;
});
}
};

function localUpdate(key, newVal, oldVal) {
patch(key, newVal);
Expand Down

0 comments on commit 78c2a8d

Please sign in to comment.