const assert = require('assert') const { unlinkSync } = require('fs') const memento = require('../').default const filename = 'test.yaml' const deleteFile = () => { try { // Remove the test file unlinkSync(filename) } catch (e) {} } describe('Memento', () => { after(deleteFile) describe('Basics', () => { deleteFile() it('Instantiating without existing file', () => { const Settings = new memento(filename) }) it('Saving simple string', () => { const Settings = new memento(filename) const key = 'test' const value = 'ok' Settings.set(key, value) assert.strictEqual(Settings.get(key), value) }) }) describe('Preserve types', () => { const Settings = new memento(filename) const key = 'key' const test = (value) => { Settings.set(key, value) const saved = Settings.get(key) assert.strictEqual(saved, value) } it('string', () => { test('my string') }) it('string array', () => { test(['my string', 'ohlala']) }) it('number', () => { test(42) }) it('number array', () => { test([42, 8]) }) it('boolean', () => { test(true) }) it('boolean array', () => { test([true, false]) }) it('mixed', () => { test(['a', 42, true]) }) }) describe('Persist', () => { deleteFile() const key = 'test' const value = 42 it('Write', () => { const Settings = new memento(filename) Settings.set(key, value) }) it('Read', () => { const Settings = new memento(filename) assert.strictEqual(Settings.get(key), value) }) }) describe('Nested properties', () => { deleteFile() const data = { a: { b: { c: [8, false] } } } it('Write', () => { const Settings = new memento(filename) Settings.set('a.b.c', data.a.b.c) }) it('Read', () => { const Settings = new memento(filename) assert.deepStrictEqual(Settings.get('a'), data.a) assert.deepStrictEqual(Settings.get('a.b'), data.a.b) assert.deepStrictEqual(Settings.get('a.b.c'), data.a.b.c) }) }) describe('Get with initializer', ()=> { deleteFile() const key = 'initialized' const value = true it('Getting', () => { const Settings = new memento(filename) assert.strictEqual(Settings.get(key, value), value) }) it('Verify it was written', () => { const Settings = new memento(filename) assert.strictEqual(Settings.get(key), value) }) }) })