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(); 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); debug('set', key, value);
await loaded; await loaded;
const previousValue = settings[key]; const previousValue = settings[key];
settings[key] = value; settings[key] = value;
try { try {
// Use exports.writeConfigFile() so it can be mocked in tests await writeConfigFileFn(CONFIG_PATH, settings);
await exports.writeConfigFile(CONFIG_PATH, settings);
} catch (error) { } catch (error) {
// Revert to previous value if persisting settings failed // Revert to previous value if persisting settings failed
settings[key] = previousValue; settings[key] = previousValue;

View File

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