VulpesOS/gaia/apps/costcontrol/test/unit/mock_config_manager.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

86 lines
2.5 KiB
JavaScript
Executable file

/* exported MockConfigManager */
'use strict';
var MockConfigManager = function(config) {
config = config || {};
Date.prototype.toJSON = function() {
return {'__date__': this.toISOString()};
};
function settingsReviver(k, v) {
if (v === null || typeof v !== 'object' || !v.hasOwnProperty('__date__')) {
return v;
}
return new Date(v.__date__);
}
function getMockRequiredMessage(mocking, parameter, isAFunction) {
var whatIsBeingAccesed = mocking + (isAFunction ? '() is being called' :
'is being accessed');
return 'Please, ' + whatIsBeingAccesed + '. Provide the key `' +
parameter + '` in the constructor config object to mock it.';
}
var fakeSettings = config.fakeSettings || {};
var fakeConfiguration = config.fakeConfiguration || {};
var mCallbacks = {};
return {
option: function(key, value) {
if (value) {
fakeSettings[key] = value;
}
return fakeSettings[key];
},
requestAll: function(callback) {
var self = this;
self.requestConfiguration(function(configuration) {
self.requestSettings(undefined, function(settings) {
callback(configuration, settings);
});
});
},
requestConfiguration: function(callback) {
callback(fakeConfiguration);
},
requestSettings: function(iccId, callback) {
callback(JSON.parse(JSON.stringify(fakeSettings), settingsReviver));
},
setOption: function(options, callback) {
Object.keys(options).forEach(function (name) {
fakeSettings[name] = options[name];
});
(typeof callback === 'function') && callback();
},
observe: function(name, callback, avoidInitialCall) {
if (typeof mCallbacks[name] !== 'function') {
mCallbacks[name] = [];
}
mCallbacks[name] = callback;
},
getApplicationMode: function() {
assert.isDefined(
config.applicationMode,
getMockRequiredMessage('getApplicationMode', 'applicationMode', true)
);
return config.applicationMode;
},
get configuration() { return config; },
mTriggerCallback: function(name, value, settings) {
if (typeof mCallbacks[name] === 'function') {
if (settings === undefined) {
settings = fakeSettings;
}
mCallbacks[name](value, null, name, settings);
}
},
mRemoveObservers: function() {
mCallbacks = {};
},
setConfig: function(newConfig) {
config = newConfig;
},
supportCustomizeMode: false
};
};