reflip
Version:
key-value-store-backed feature flipping middleware for connect/express.js
136 lines (114 loc) • 2.95 kB
JavaScript
/*global describe:true, it:true, before:true, after:true */
;
var
_ = require('lodash'),
demand = require('must'),
redis = require('redis'),
fs = require('fs')
;
var RedisAdapter = require('../lib/redis');
var testFeatures = require('./mocks/features.json');
describe('RedisAdapter', function()
{
before(function(done)
{
var r = redis.createClient();
var chain = r.multi();
var features = [];
_.each(testFeatures.features, function(item)
{
features.push(item.name);
chain.hmset('reflip:' + item.name, item);
});
chain.set('reflip:ttl', testFeatures.ttl);
chain.sadd('reflip:features', features);
chain.exec(function(err, replies)
{
done();
});
});
it('requires an options object', function(done)
{
function shouldThrow() { var r = new RedisAdapter(); }
shouldThrow.must.throw();
done();
});
it('requires client or host/port in options', function(done)
{
function shouldThrow() { var r = new RedisAdapter({}); }
shouldThrow.must.throw();
done();
});
it('respects the host/port options', function(done)
{
var r = new RedisAdapter({ host: 'localhost', port: 6379 });
r.must.have.property('client');
r.client.must.be.an.object();
done();
});
it('respects the client option', function(done)
{
var client = redis.createClient();
var r = new RedisAdapter({ client: client });
r.must.have.property('client');
r.client.must.be.an.object();
r.client.must.equal(client);
client.end();
done();
});
it('respects the namespace option', function(done)
{
var client = redis.createClient();
var r = new RedisAdapter({ client: client, namespace: 'foozles:' });
var t = r.makeKey('features');
t.must.match(/^foozles:/);
client.end();
done();
});
it('read() returns a promise', function(done)
{
var client = redis.createClient();
var r = new RedisAdapter({ client: client, namespace: 'foozles:' });
var result = r.read();
result.must.be.truthy();
result.must.be.an.object();
result.must.have.property('then');
result.then.must.be.a.function();
done();
});
it('read() reads the hashes', function(done)
{
var client = redis.createClient();
var r = new RedisAdapter({ client: client });
r.read()
.then(function(result)
{
result.must.be.truthy();
result.must.be.an.object();
result.must.have.property('ttl');
result.ttl.must.equal(testFeatures.ttl);
result.must.have.property('features');
result.features.must.be.an.array();
result.features.length.must.equal(testFeatures.features.length);
done();
}, function(err)
{
demand(err).be.undefined();
}).done();
});
after(function(done)
{
var r = redis.createClient();
var chain = r.multi();
chain.del('reflip:ttl');
chain.del('reflip:features');
_.each(Object.keys(testFeatures.features), function(k)
{
chain.del('reflip:' + k);
});
chain.exec(function(err, replies)
{
done();
});
});
});