forked from public/fvtt-cthulhu-eternal
76 lines
1.5 KiB
JavaScript
76 lines
1.5 KiB
JavaScript
'use strict'
|
|
|
|
const test = require('tape')
|
|
const { mockLevel } = require('../util')
|
|
const nextTick = require('../../lib/next-tick')
|
|
|
|
test('resource must be an object with a close() method', function (t) {
|
|
t.plan(5)
|
|
|
|
const db = mockLevel()
|
|
|
|
for (const invalid of [null, undefined, {}, { close: 123 }]) {
|
|
try {
|
|
db.attachResource(invalid)
|
|
} catch (err) {
|
|
t.is(err && err.message, 'The first argument must be a resource object')
|
|
}
|
|
}
|
|
|
|
db.close(t.ifError.bind(t))
|
|
})
|
|
|
|
test('resource is closed on failed open', function (t) {
|
|
t.plan(2)
|
|
|
|
const db = mockLevel({
|
|
_open: function (options, callback) {
|
|
t.pass('opened')
|
|
this.nextTick(callback, new Error('_open error'))
|
|
}
|
|
})
|
|
|
|
const resource = {
|
|
close: function (cb) {
|
|
// Note: resource shouldn't care about db.status
|
|
t.pass('closed')
|
|
nextTick(cb)
|
|
}
|
|
}
|
|
|
|
db.attachResource(resource)
|
|
})
|
|
|
|
test('resource is closed on db.close()', function (t) {
|
|
t.plan(2)
|
|
|
|
const db = mockLevel()
|
|
|
|
const resource = {
|
|
close: function (cb) {
|
|
// Note: resource shouldn't care about db.status
|
|
t.pass('closed')
|
|
nextTick(cb)
|
|
}
|
|
}
|
|
|
|
db.attachResource(resource)
|
|
db.close(t.ifError.bind(t))
|
|
})
|
|
|
|
test('resource is not closed on db.close() if detached', function (t) {
|
|
t.plan(1)
|
|
|
|
const db = mockLevel()
|
|
|
|
const resource = {
|
|
close: function (cb) {
|
|
t.fail('should not be called')
|
|
}
|
|
}
|
|
|
|
db.attachResource(resource)
|
|
db.detachResource(resource)
|
|
db.close(t.ifError.bind(t))
|
|
})
|