Ghost/ghost/adapter-cache-redis/test/adapter-cache-redis.test.js
Naz 7c18263227 Extracted adapter-cache-redis from core codebase
refs https://github.com/TryGhost/Toolbox/issues/515

- This implementation allows to use Redis cluster as a caching adapter. The cache adapter can be configured through same adapter configuration interface as others. It accepts following config values:
  - "ttl" - time in SECONDS for stored entity to live in Redis cache
  - "keyPrefix" - special cache key prefix to use with stored entities
  - "host" / "port" / "password" / "clusterConfig" - Redis instance specific configs
- Set test coverage to non-standard 75% because the code mostly consists of the glue code that would require unnecessary Redis server mocking and would be a bad ROI. This module has been used in production for a long time already, so can be considered pretty stable.
2023-02-13 19:01:43 +08:00

86 lines
2.6 KiB
JavaScript

const assert = require('assert');
const sinon = require('sinon');
const RedisCache = require('../index');
describe('Adapter Cache Redis', function () {
afterEach(function () {
sinon.restore();
});
it('can initialize Redis cache instance directly', async function () {
const redisCacheInstanceStub = {
store: {
getClient: sinon.stub().returns({
on: sinon.stub()
})
}
};
const cache = new RedisCache({
cache: redisCacheInstanceStub
});
assert.ok(cache);
});
describe('get', function () {
it('can get a value from the cache', async function () {
const redisCacheInstanceStub = {
get: sinon.stub().resolves('value from cache'),
store: {
getClient: sinon.stub().returns({
on: sinon.stub()
})
}
};
const cache = new RedisCache({
cache: redisCacheInstanceStub
});
const value = await cache.get('key');
assert.equal(value, 'value from cache');
});
});
describe('set', function () {
it('can set a value in the cache', async function () {
const redisCacheInstanceStub = {
set: sinon.stub().resolvesArg(1),
store: {
getClient: sinon.stub().returns({
on: sinon.stub()
})
}
};
const cache = new RedisCache({
cache: redisCacheInstanceStub
});
const value = await cache.set('key-here', 'new value');
assert.equal(value, 'new value');
assert.equal(redisCacheInstanceStub.set.args[0][0], 'key-here');
});
it('sets a key based on keyPrefix', async function () {
const redisCacheInstanceStub = {
set: sinon.stub().resolvesArg(1),
store: {
getClient: sinon.stub().returns({
on: sinon.stub()
})
}
};
const cache = new RedisCache({
cache: redisCacheInstanceStub,
keyPrefix: 'testing-prefix:'
});
const value = await cache.set('key-here', 'new value');
assert.equal(value, 'new value');
assert.equal(redisCacheInstanceStub.set.args[0][0], 'testing-prefix:key-here');
});
});
});