Fix writing config file

Changelog-entry: Fix writing config file
Change-type: patch
This commit is contained in:
Alexis Svinartchouk 2020-08-20 17:27:24 +02:00
parent 08716efbd5
commit a24be20e95
2 changed files with 17 additions and 13 deletions

View File

@ -92,14 +92,17 @@ async function load(): Promise<void> {
const loaded = load();
export async function set(key: string, value: any): Promise<void> {
export async function set(
key: string,
value: any,
writeConfigFileFn = writeConfigFile,
): Promise<void> {
debug('set', key, value);
await loaded;
const previousValue = settings[key];
settings[key] = value;
try {
// Use exports.writeConfigFile() so it can be mocked in tests
await exports.writeConfigFile(CONFIG_PATH, settings);
await writeConfigFileFn(CONFIG_PATH, settings);
} catch (error) {
// Revert to previous value if persisting settings failed
settings[key] = previousValue;

View File

@ -44,16 +44,15 @@ describe('Browser: settings', () => {
await settings.set('foo', 'bar');
expect(await settings.get('foo')).to.equal('bar');
const writeConfigFileStub = stub(settings, 'writeConfigFile');
const writeConfigFileStub = stub();
writeConfigFileStub.returns(Promise.reject(new Error('settings error')));
const p = settings.set('foo', 'baz');
const p = settings.set('foo', 'baz', writeConfigFileStub);
await checkError(p, async (error) => {
expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('settings error');
expect(await settings.get('foo')).to.equal('bar');
});
writeConfigFileStub.restore();
});
});
@ -83,15 +82,17 @@ describe('Browser: settings', () => {
await settings.set('foo', 'bar');
expect(await settings.get('foo')).to.equal('bar');
const writeConfigFileStub = stub(settings, 'writeConfigFile');
const writeConfigFileStub = stub();
writeConfigFileStub.returns(Promise.reject(new Error('settings error')));
await checkError(settings.set('foo', 'baz'), async (error) => {
expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('settings error');
expect(await settings.get('foo')).to.equal('bar');
});
writeConfigFileStub.restore();
await checkError(
settings.set('foo', 'baz', writeConfigFileStub),
async (error) => {
expect(error).to.be.an.instanceof(Error);
expect(error.message).to.equal('settings error');
expect(await settings.get('foo')).to.equal('bar');
},
);
});
});
});