UNPKG

recacheman-file

Version:

File caching library for Node.JS and also cache engine for cacheman

180 lines (161 loc) 4.68 kB
var assert = require('assert'); var Path = require('path'); var Fs = require('fs-extra'); var sanitize = require('sanitize-filename'); var Cache = require('../src/index'); var cache; describe('cacheman-file', function() { before(function(done) { cache = new Cache({tmpDir: Path.join(process.cwd(), 'temp')}, {}); done(); }); after(function(done) { cache.clear('test'); done(); }); it('should have main methods', function() { assert.ok(cache.set); assert.ok(cache.get); assert.ok(cache.del); assert.ok(cache.clear); assert.ok(cache.getAll); }); it('should set temp directory from options', function (done) { Fs.ensureDir(Path.join(process.cwd(), 'temp'), function(err, results) { assert.strictEqual(err, null); done(); }); }); it('should store items', function(done) { cache.set('test1', { a: 1 }, function(err) { if (err) return done(err); cache.get('test1', function(err, data) { if (err) return done(err); assert.strictEqual(data.a, 1); done(); }); }); }); it('should store zero', function(done) { cache.set('test2', 0, function(err) { if (err) return done(err); cache.get('test2', function(err, data) { if (err) return done(err); assert.strictEqual(data, 0); done(); }); }); }); it('should store false', function(done) { cache.set('test3', false, function(err) { if (err) return done(err); cache.get('test3', function(err, data) { if (err) return done(err); assert.strictEqual(data, false); done(); }); }); }); it('should store null', function(done) { cache.set('test4', null, function(err) { if (err) return done(err); cache.get('test4', function(err, data) { if (err) return done(err); assert.strictEqual(data, null); done(); }); }); }); it('should allow special characters on keys', function(done) { var key = '/path/to/url/?param=123'; cache.set(key, { a: 1 }, function(err) { if (err) return done(err); // compare cached key against sanitized key var lastKey = Object.keys(cache.cache).pop(); var sanitizedKey = sanitize(key); assert.strictEqual(sanitizedKey, lastKey); // check functionality, along the way cache.get(key, function(err, data) { if (err) return done(err); assert.strictEqual(data.a, 1); done(); }); }); }); it('should delete items', function(done) { var value = Date.now(); cache.set('test5', value, function(err) { if (err) return done(err); cache.get('test5', function(err, data) { if (err) return done(err); assert.strictEqual(data, value); cache.del('test5', function(err) { if (err) return done(err); cache.get('test5', function(err, data) { if (err) return done(err); assert.strictEqual(data, null); done(); }); }); }); }); }); it('should clear items', function(done) { var value = Date.now(); cache.set('test6', value, function(err) { if (err) return done(err); cache.get('test6', function(err, data) { if (err) return done(err); assert.strictEqual(data, value); cache.clear('', function(err) { if (err) return done(err); cache.get('test6', function(err, data) { if (err) return done(err); assert.strictEqual(data, null); done(); }); }); }); }); }); it('should expire key', function(done) { this.timeout(0); cache.set('test1', { a: 1 }, 1, function(err) { if (err) return done(err); setTimeout(function() { cache.get('test1', function(err, data) { if (err) return done(err); assert.strictEqual(data, null); done(); }); }, 1100); }); }); it('should get entire cache', function (done) { var items = [ { a: 'test1' }, { a: 'test2' }, { a: 'test3' } ]; cache.set('test1', items[0], function (err) { assert.deepStrictEqual(null, err); cache.set('test2', items[1], function (err) { assert.deepStrictEqual(null, err); cache.set('test3', items[2], function (err) { assert.deepStrictEqual(null, err); cache.getAll(function (err, results) { assert.deepStrictEqual(null, err); assert.deepStrictEqual(items, results); done(); }); }); }); }); }); });