hyperjsondb
Version:
A proxymised Json database using hyperdb, to store key-value flat objects
85 lines (67 loc) • 2.77 kB
JavaScript
var test = require('tape')
var path = require('path')
var fs = require('fs')
function rimraf (dirPath) {
if (fs.existsSync(dirPath)) {
fs.readdirSync(dirPath).forEach(function (entry) {
var entryPath = path.join(dirPath, entry)
if (fs.lstatSync(entryPath).isDirectory()) {
rimraf(entryPath)
} else {
fs.unlinkSync(entryPath)
}
})
fs.rmdirSync(dirPath)
}
}
var dirPath = './testdb'
rimraf(dirPath)
var Hyperjsondb = require('./hyperjsondb')
var db = new Hyperjsondb(dirPath)
db.on('ready', () => {
test('Should put an object and get the username', async (t) => {
await db.put('/randid', {
username: 'Javi'
})
t.equal(await db.get('/randid').username, 'Javi')
t.equal(await db.get('/randid/username'), 'Javi')
t.end()
})
test('Should update the object', async (t) => {
await db.put('/randid', { username: 'Sam' })
t.equal(await db.get('/randid').username, 'Sam', 'Should proxymise the object')
t.equal(await db.get('/randid/username'), 'Sam', 'Should get the correct value')
t.end()
})
test('Array actions', async (t) => {
await db.put('/randid/friends', [{ username: 'Javi' }])
var r1 = await db.get('/randid/friends')
t.deepEqual(r1, [{ username: 'Javi' }], 'Should create the Array')
await db.put('/randid/friends/0/username', 'Adam')
var r2 = await db.get('/randid/friends')
t.deepEqual(r2, [{ username: 'Adam' }], 'Should update the [0] object')
t.end()
})
test('Patch actions', async (t) => {
await db.add('/randid/friends', { username: 'Other' })
var r1 = await db.get('/randid/friends')
t.deepEqual(r1, [{ username: 'Other' }, { username: 'Adam' }], 'Should add object to array')
// console.log('PARTIAL', await db.get('/'))
await db.add('/randid', { prop: 'newProp' })
var r3 = await db.get('/')
t.deepEqual(r3, { randid: [ { prop: 'newProp' }, { friends: [ { username: 'Other' }, { username: 'Adam' } ], username: 'Sam' } ] }, 'Should add property to root')
await db.replace('/randid/1/friends/1/username', 'Sam2018')
var r4 = await db.get('/randid/1/friends')
t.deepEqual(r4, [{ 'username': 'Other' }, { 'username': 'Sam2018' }], 'Should replace the value')
await db.replace('/randid/1/friends/1', { username: 'Sam2019' })
var r5 = await db.get('/randid/1/friends')
t.deepEqual(r5, [{ 'username': 'Other' }, { 'username': 'Sam2019' }], 'Should replace the value, from object')
await db.replace('/randid/username', 'Javi')
var r6 = await db.get('/randid/username')
t.deepEqual(r6, 'Javi', 'Should replace the value')
await db.remove('/')
var r7 = await db.get('/')
t.deepEqual(r7, {}, 'Should remove all')
t.end()
})
})