keyv-nedb-core
Version:
nedb-core adapter for keyv
75 lines (66 loc) • 2.31 kB
JavaScript
import test from 'ava'
import tk from 'timekeeper'
import keyvTestSuite from '@keyv/test-suite'
import Keyv from 'keyv'
import KeyvNedbCore from 'this'
const evictionTests = (test, Keyv, store) => {
test.beforeEach(async () => {
const keyv = new Keyv({ store: store() })
await keyv.clear()
})
test.serial('.evictExpired() returns a Promise', t => {
const keyv = new Keyv({ store: store() })
t.true(keyv.opts.store.evictExpired() instanceof Promise)
})
test.serial('.evictExpired() evicts expired keys', async t => {
const ttl = 500
const keyv = new Keyv({ store: store() })
await keyv.set('foo', 'bar', ttl)
tk.freeze(Date.now() + ttl + 1)
await keyv.opts.store.evictExpired()
t.is(await keyv.opts.store.dbaccess.findOne({ key: 'foo' }), null)
tk.reset()
})
test.serial('.evictExpired() doesn\'t evicts fresh keys', async t => {
const ttl = 500
const keyv = new Keyv({ store: store() })
await keyv.set('foo', 'bar', ttl)
tk.freeze(Date.now() + ttl - 10)
await keyv.opts.store.evictExpired()
t.is(await keyv.get('foo'), 'bar')
tk.reset()
})
test.serial('automatic eviction evicts expired keys', async t => {
const ttl = 500
const ops = 10
const keyv = new Keyv({ store: new KeyvNedbCore({ automaticEviction: ops }) })
for (let i = 0; i < (ops + 1); ++i) {
await keyv.set('foo' + i, 'bar' + i, ttl)
}
tk.freeze(Date.now() + ttl + 1)
for (let i = 0; i < (ops + 1); ++i) {
t.is(await keyv.get('foo' + i), undefined)
}
tk.reset()
})
test.serial('automatic eviction doesn\'t evict fresh keys', async t => {
const ttl = 500
const ops = 10
const keyv = new Keyv({ store: new KeyvNedbCore({ automaticEviction: ops }) })
for (let i = 0; i < (ops + 1); ++i) {
await keyv.set('foo' + i, 'bar' + i, ttl)
}
tk.freeze(Date.now() + ttl - 10)
for (let i = 0; i < (ops + 1); ++i) {
t.is(await keyv.get('foo' + i), 'bar' + i)
}
tk.reset()
})
test.after.always(async () => {
const keyv = new Keyv({ store: store() })
await keyv.clear()
})
}
const store = () => new KeyvNedbCore()
keyvTestSuite(test, Keyv, store)
evictionTests(test, Keyv, store)