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))
 | |
| })
 |