src/__tests__/requestCache.spec.js
const RequestCache = require('../requestCache')
describe('Request Cache', () => {
let cache
beforeEach(() => {
cache = new RequestCache()
cache.add('session', {
hello: 'World'
})
cache.add('array', [
{
id: 1,
name: 'Sergio'
},
{
id: 2,
name: 'Angela'
}
])
})
it('should add keys to the cache', () => {
expect(cache.$cache.session.hello).toBe('World')
})
describe('get', () => {
it('should be able to find key values with a given path', () => {
expect(cache.get('session.hello')).toBe('World')
})
it('should throw when given an invalid path', () => {
expect(() => cache.get('$session.world')).toThrow()
})
})
describe('parse', () => {
it("should transform variables in strings using it's cache", () => {
expect(cache.parse('Hello $session.hello')).toBe('Hello World')
})
it('should go transform variables in all values when given an object', () => {
let parsed = cache.parse({
hello: 'hello $session.hello',
earth: '$session.hello'
})
expect(parsed.hello).toBe('hello World')
expect(parsed.earth).toBe('World')
})
it('should return every non-string value as-is', () => {
let parsed = cache.parse({
number: 1,
nulled: null,
truthy: false,
hello: '$session.hello'
})
expect(parsed.number).toBe(1)
expect(parsed.nulled).toBeNull()
expect(parsed.truthy).toBe(false)
expect(parsed.hello).toBe('World')
})
it('should parse arrays as well', () => {
let parsed = cache.parse({ hello: '$array.0.name' })
expect(parsed.hello).toBe('Sergio')
})
it('should return an object when given an undefined value', () => {
expect(cache.parse(undefined)).toEqual({})
})
it('should parse any value other than undefined', () => {
expect(cache.parse('Hello $session.hello')).toBe('Hello World')
})
it('should return null when passed null', () => {
expect(cache.parse(null)).toBe(null)
})
it(`shouldn't replace escaped variables`, () => {
expect(cache.parse(`\\$session.hello is $session.hello`)).toBe(
`$session.hello is World`
)
})
})
})