[api test doc] Internal fixes from testing. More tests and docs

This commit is contained in:
indexzero 2011-04-02 04:31:20 -04:00
parent 73bf78339f
commit 09b8c75383
9 changed files with 160 additions and 23 deletions

View file

@ -19,7 +19,7 @@ nconf.stores = require('nconf/stores');
// specified `type`. // specified `type`.
// //
nconf.use = function (type, options) { nconf.use = function (type, options) {
nconf.store = new nconf.stores[type](options); nconf.store = new nconf.stores.create(type, options);
}; };
// //

View file

@ -7,6 +7,21 @@
var stores = exports; var stores = exports;
function capitalize (str) {
return str && str[0].toUpperCase() + str.slice(1);
};
stores.Memory = require('nconf/stores/memory').Memory; stores.Memory = require('nconf/stores/memory').Memory;
stores.File = require('nconf/stores/file').File; stores.File = require('nconf/stores/file').File;
stores.Redis = require('nconf/stores/redis').Redis; stores.Redis = require('nconf/stores/redis').Redis;
//
// ### function create (type, options)
// #### @type {string} Type of the nconf store to use.
// #### @options {Object} Options for the store instance.
// Creates a store of the specified `type` using the
// specified `options`.
//
stores.create = function (type, options) {
return new stores[capitalize(type.toLowerCase())](options);
};

View file

@ -20,7 +20,7 @@ var File = exports.File = function (options) {
throw new Error ('Missing required option `files`'); throw new Error ('Missing required option `files`');
} }
nconf.stores.Memory.call(this, options); Memory.call(this, options);
this.file = options.file; this.file = options.file;
this.format = options.format || JSON; this.format = options.format || JSON;
@ -42,7 +42,7 @@ File.prototype.save = function (value, callback) {
value = null; value = null;
} }
fs.save(this.file, this.format.stringify(this.store), function (err) { fs.writeFile(this.file, this.format.stringify(this.store), function (err) {
return err ? callback(err) : callback(); return err ? callback(err) : callback();
}); });
}; };
@ -54,12 +54,13 @@ File.prototype.save = function (value, callback) {
// //
File.prototype.load = function (callback) { File.prototype.load = function (callback) {
var self = this; var self = this;
fs.load(this.file, function (err, data) { fs.readFile(this.file, function (err, data) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
self.store = self.format.parse(data.toString()); data = self.format.parse(data.toString());
self.store = data;
callback(null, self.store); callback(null, self.store);
}); });
}; };

56
test/file-store-test.js Normal file
View file

@ -0,0 +1,56 @@
/*
* file-store-test.js: Tests for the nconf File store.
*
* (C) 2011, Charlie Robbins
*
*/
require.paths.unshift(require('path').join(__dirname, '..', 'lib'));
var fs = require('fs'),
path = require('path'),
vows = require('vows'),
assert = require('assert'),
nconf = require('nconf'),
data = require('./fixtures/data').data,
store;
vows.describe('nconf/stores/file').addBatch({
"When using the nconf file store": {
topic: function () {
var filePath = path.join(__dirname, 'fixtures', 'store.json');
fs.writeFileSync(filePath, JSON.stringify(data));
store = new nconf.stores.File({ file: filePath });
return null;
},
"the load() method": {
topic: function () {
store.load(this.callback);
},
"should load the data correctly": function (err, data) {
assert.isNull(err);
assert.deepEqual(data, store.store);
}
}
}
}).addBatch({
"When using the nconf file store": {
"the set() method": {
"should respond with true": function () {
assert.isTrue(store.set('foo:bar:bazz', 'buzz'));
}
},
"the get() method": {
"should respond with the correct value": function () {
assert.equal(store.get('foo:bar:bazz'), 'buzz');
}
},
"the clear() method": {
"should respond with the true": function () {
assert.equal(store.get('foo:bar:bazz'), 'buzz');
assert.isTrue(store.clear('foo:bar:bazz'));
assert.isTrue(typeof store.get('foo:bar:bazz') === 'undefined');
}
}
}
}).export(module);

20
test/fixtures/data.js vendored Normal file
View file

@ -0,0 +1,20 @@
/*
* data.js: Simple data fixture for configuration test.
*
* (C) 2011, Charlie Robbins
*
*/
exports.data = {
literal: 'bazz',
arr: ['one', 2, true, { value: 'foo' }],
obj: {
host: 'localhost',
port: 5984,
array: ['one', 2, true, { foo: 'bar' }],
auth: {
username: 'admin',
password: 'password'
}
}
}

1
test/fixtures/store.json vendored Normal file
View file

@ -0,0 +1 @@
{"literal":"bazz","arr":["one",2,true,{"value":"foo"}],"obj":{"host":"localhost","port":5984,"array":["one",2,true,{"foo":"bar"}],"auth":{"username":"admin","password":"password"}}}

View file

@ -1,5 +1,5 @@
/* /*
* memory.js: Simple memory storage engine for nconf configuration(s) * memory-store-test.js: Tests for the nconf Memory store.
* *
* (C) 2011, Charlie Robbins * (C) 2011, Charlie Robbins
* *

57
test/nconf-test.js Normal file
View file

@ -0,0 +1,57 @@
/*
* file-store-test.js: Tests for the nconf File store.
*
* (C) 2011, Charlie Robbins
*
*/
require.paths.unshift(require('path').join(__dirname, '..', 'lib'));
var fs = require('fs'),
path = require('path'),
vows = require('vows'),
assert = require('assert'),
nconf = require('nconf'),
data = require('./fixtures/data').data;
vows.describe('nconf').addBatch({
"When using the nconf": {
"should have the correct methods set": function () {
assert.isFunction(nconf.key);
assert.isFunction(nconf.path);
assert.isFunction(nconf.use);
assert.isFunction(nconf.get);
assert.isFunction(nconf.set);
assert.isFunction(nconf.clear);
assert.isFunction(nconf.load);
assert.isFunction(nconf.save);
assert.isFunction(nconf.reset);
},
"the use() method": {
"should instaniate the correct store": function () {
nconf.use('redis');
assert.instanceOf(nconf.store, nconf.stores.Redis);
}
}
}
})/*.addBatch({
"When using the nconf file store": {
"the set() method": {
"should respond with true": function () {
assert.isTrue(store.set('foo:bar:bazz', 'buzz'));
}
},
"the get() method": {
"should respond with the correct value": function () {
assert.equal(store.get('foo:bar:bazz'), 'buzz');
}
},
"the clear() method": {
"should respond with the true": function () {
assert.equal(store.get('foo:bar:bazz'), 'buzz');
assert.isTrue(store.clear('foo:bar:bazz'));
assert.isTrue(typeof store.get('foo:bar:bazz') === 'undefined');
}
}
}
})*/.export(module);

View file

@ -1,5 +1,5 @@
/* /*
* redis-test.js: Tests for the redis nconf storage engine. * redis-store-test.js: Tests for the redis nconf storage engine.
* *
* (C) 2011, Charlie Robbins * (C) 2011, Charlie Robbins
* *
@ -9,21 +9,8 @@ require.paths.unshift(require('path').join(__dirname, '..', 'lib'));
var vows = require('vows'), var vows = require('vows'),
assert = require('assert'), assert = require('assert'),
nconf = require('nconf'); nconf = require('nconf'),
data = require('./fixtures/data').data;
var data = {
literal: 'bazz',
arr: ['one', 2, true, { value: 'foo' }],
obj: {
host: 'localhost',
port: 5984,
array: ['one', 2, true, { foo: 'bar' }],
auth: {
username: 'admin',
password: 'password'
}
}
}
vows.describe('nconf/stores/redis').addBatch({ vows.describe('nconf/stores/redis').addBatch({
"When using the nconf redis store": { "When using the nconf redis store": {