You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.8 KiB
135 lines
3.8 KiB
/* Copyright (c) 2012-2016 LevelUP contributors |
|
* See list at <https://github.com/level/levelup#contributing> |
|
* MIT License <https://github.com/level/levelup/blob/master/LICENSE.md> |
|
*/ |
|
|
|
var levelup = require('../lib/levelup.js') |
|
var errors = levelup.errors |
|
var async = require('async') |
|
var common = require('./common') |
|
var assert = require('referee').assert |
|
var refute = require('referee').refute |
|
var buster = require('bustermove') |
|
|
|
buster.testCase('get() / put() / del()', { |
|
'setUp': common.commonSetUp, |
|
'tearDown': common.commonTearDown, |
|
|
|
'Simple operations': { |
|
'get() on empty database causes error': function (done) { |
|
this.openTestDatabase(function (db) { |
|
db.get('undefkey', function (err, value) { |
|
refute(value) |
|
assert.isInstanceOf(err, Error) |
|
assert.isInstanceOf(err, errors.LevelUPError) |
|
assert.isInstanceOf(err, errors.NotFoundError) |
|
assert(err.notFound === true, 'err.notFound is `true`') |
|
assert.equals(err.status, 404, 'err.status is 404') |
|
assert.match(err, '[undefkey]') |
|
done() |
|
}) |
|
}) |
|
}, |
|
|
|
'put() and get() simple string key/value pairs': function (done) { |
|
this.openTestDatabase(function (db) { |
|
db.put('some key', 'some value stored in the database', function (err) { |
|
refute(err) |
|
db.get('some key', function (err, value) { |
|
refute(err) |
|
assert.equals(value, 'some value stored in the database') |
|
done() |
|
}) |
|
}) |
|
}) |
|
}, |
|
|
|
'del() on empty database doesn\'t cause error': function (done) { |
|
this.openTestDatabase(function (db) { |
|
db.del('undefkey', function (err) { |
|
refute(err) |
|
done() |
|
}) |
|
}) |
|
}, |
|
|
|
'del() works on real entries': function (done) { |
|
this.openTestDatabase(function (db) { |
|
async.series([ |
|
function (callback) { |
|
async.forEach(['foo', 'bar', 'baz'], function (key, callback) { |
|
db.put(key, 1 + Math.random(), callback) |
|
}, callback) |
|
}, |
|
function (callback) { |
|
db.del('bar', callback) |
|
}, |
|
function (callback) { |
|
async.forEach(['foo', 'bar', 'baz'], function (key, callback) { |
|
db.get(key, function (err, value) { |
|
// we should get foo & baz but not bar |
|
if (key === 'bar') { |
|
assert(err) |
|
refute(value) |
|
} else { |
|
refute(err) |
|
assert(value) |
|
} |
|
callback() |
|
}) |
|
}, callback) |
|
} |
|
], done) |
|
}) |
|
} |
|
}, |
|
|
|
'test get() throwables': function (done) { |
|
this.openTestDatabase(function (db) { |
|
assert.exception( |
|
db.get.bind(db), |
|
{ name: 'ReadError', message: 'get() requires key and callback arguments' }, |
|
'no-arg get() throws' |
|
) |
|
|
|
assert.exception( |
|
db.get.bind(db, 'foo'), |
|
{ name: 'ReadError', message: 'get() requires key and callback arguments' }, |
|
'callback-less, 1-arg get() throws' |
|
) |
|
|
|
assert.exception( |
|
db.get.bind(db, 'foo', {}), |
|
{ name: 'ReadError', message: 'get() requires key and callback arguments' }, |
|
'callback-less, 2-arg get() throws' |
|
) |
|
|
|
done() |
|
}) |
|
}, |
|
|
|
'test put() throwables': function (done) { |
|
this.openTestDatabase(function (db) { |
|
assert.exception( |
|
db.put.bind(db), |
|
{ name: 'WriteError', message: 'put() requires a key argument' }, |
|
'no-arg put() throws' |
|
) |
|
|
|
done() |
|
}) |
|
}, |
|
|
|
'test del() throwables': function (done) { |
|
this.openTestDatabase(function (db) { |
|
assert.exception( |
|
db.del.bind(db), |
|
{ name: 'WriteError', message: 'del() requires a key argument' }, |
|
'no-arg del() throws' |
|
) |
|
|
|
done() |
|
}) |
|
} |
|
|
|
})
|
|
|