UNPKG

volatile-map

Version:

ES6 Map object whose values are deleted after a TTL

80 lines (63 loc) 1.51 kB
import test from 'ava'; import VolatileMap from './index.js'; /** * Simple utility timeout method that returns a promise. */ const timeoutPromise = function (cb, time) { return new Promise(resolve => { setTimeout(() => { cb(); resolve(); }, time); }); }; test('Should delete properties after TTL', async t => { const m = new VolatileMap(300); m.set('a', 1); m.set('b', 2); t.is(m.get('a'), 1); t.is(m.get('b'), 2); await timeoutPromise(() => { t.is(m.get('a'), undefined); t.is(m.get('b'), undefined); }, 500); }); test('Should allow for custom TTL', async t => { const m = new VolatileMap(300); m.set('a', 1); m.set('b', 2, 600); t.is(m.get('a'), 1); t.is(m.get('b'), 2); await timeoutPromise(() => { t.is(m.get('a'), undefined); t.is(m.get('b'), 2); }, 500); await timeoutPromise(() => { t.is(m.get('a'), undefined); t.is(m.get('b'), undefined); }, 300); }); test('Should reset TTL after a non expired value is set', async t => { const m = new VolatileMap(300); m.set('a', 1); t.is(m.get('a'), 1); await timeoutPromise(() => { t.is(m.get('a'), 1); m.set('a', 1); }, 200); await timeoutPromise(() => { t.is(m.get('a'), 1); }, 200); await timeoutPromise(() => { t.is(m.get('a'), undefined); }, 200); }); test('Should delete timer after deleting a value', async t => { const m = new VolatileMap(); m.set('a', 1); m.delete('a'); t.is(m.get('a'), undefined); await timeoutPromise(() => { t.is(m.get('a'), undefined); }, 400); });