var execSync = require('child_process').execSync;

var assert = require('chai').assert;
var rewire = require('rewire');

var cache = rewire('../lib/cache');
var h = rewire('../lib/helper');

describe('cache', function() {
  var k = '.test';
  var v = {test: 'data'};

  before(function() {
    var cachedir = './tmp';
    execSync('rm -rf ' + cachedir);

    h.getCacheDir = function() {
      return cachedir;
    };
    cache.__set__('h', h);
  });

  it('should ok when not cached', function() {
    cache.del(k);

    assert.equal(cache.get(k), null);
    assert.equal(cache.del(k), false);
  });

  it('should ok when cached', function() {
    assert.equal(cache.set(k, v), true);

    assert.deepEqual(cache.get(k), v);
    assert.equal(cache.del(k), true);
  });

  it('should list ok when no cached', function() {
    var items = cache.list();
    assert.equal(items.length, 0);
  });

  it('should list ok when cached', function() {
    assert.equal(cache.set(k, v), true);

    var items = cache.list();
    assert.equal(items.length, 1);

    assert.equal(items[0].name, k);
    assert.equal(items[0].size, JSON.stringify(v).length);
  });

  it('should list ok when cache dir not exist', function() {
    h.getCacheDir = function() {
      return '/not-exist-dir';
    };

    var items = cache.list();
    assert.equal(items.length, 0);
  });
});