65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| let db
 | |
| let keySequence = 0
 | |
| 
 | |
| const testKey = () => 'test' + (++keySequence)
 | |
| 
 | |
| exports.all = function (test, testCommon) {
 | |
|   test('setup', async function (t) {
 | |
|     db = testCommon.factory()
 | |
|     return db.open()
 | |
|   })
 | |
| 
 | |
|   // NOTE: adapted from encoding-down
 | |
|   test('get() and getMany() forward decode error', function (t) {
 | |
|     const key = testKey()
 | |
|     const valueEncoding = {
 | |
|       encode: (v) => v,
 | |
|       decode: (v) => { throw new Error('decode error xyz') },
 | |
|       format: 'utf8'
 | |
|     }
 | |
| 
 | |
|     db.put(key, 'bar', { valueEncoding }, function (err) {
 | |
|       t.ifError(err, 'no put() error')
 | |
| 
 | |
|       db.get(key, { valueEncoding }, function (err, value) {
 | |
|         t.is(err && err.code, 'LEVEL_DECODE_ERROR')
 | |
|         t.is(err && err.cause && err.cause.message, 'decode error xyz')
 | |
|         t.is(value, undefined)
 | |
| 
 | |
|         db.getMany(['other-key', key], { valueEncoding }, function (err, values) {
 | |
|           t.is(err && err.code, 'LEVEL_DECODE_ERROR')
 | |
|           t.is(err && err.cause && err.cause.message, 'decode error xyz')
 | |
|           t.is(values, undefined)
 | |
|           t.end()
 | |
|         })
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   // NOTE: adapted from encoding-down
 | |
|   test('get() and getMany() yield encoding error if stored value is invalid', function (t) {
 | |
|     const key = testKey()
 | |
| 
 | |
|     db.put(key, 'this {} is [] not : json', { valueEncoding: 'utf8' }, function (err) {
 | |
|       t.ifError(err, 'no put() error')
 | |
| 
 | |
|       db.get(key, { valueEncoding: 'json' }, function (err) {
 | |
|         t.is(err && err.code, 'LEVEL_DECODE_ERROR')
 | |
|         t.is(err && err.cause.name, 'SyntaxError') // From JSON.parse()
 | |
| 
 | |
|         db.getMany(['other-key', key], { valueEncoding: 'json' }, function (err) {
 | |
|           t.is(err && err.code, 'LEVEL_DECODE_ERROR')
 | |
|           t.is(err && err.cause.name, 'SyntaxError') // From JSON.parse()
 | |
|           t.end()
 | |
|         })
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   test('teardown', async function (t) {
 | |
|     return db.close()
 | |
|   })
 | |
| }
 |