add tests for session-cache, fix a test

This commit is contained in:
Daniel Waxweiler 2021-04-05 18:23:37 +02:00
parent 12e6adacbf
commit c9b04cb2f8
5 changed files with 45 additions and 11 deletions

View File

@ -17,12 +17,12 @@ export function getUpcomingEvents({ url, limit }) {
}
}
`
const dataInCache = SessionCache.get({ url, query, variables: { limit }})
const dataInCache = SessionCache.get(sessionStorage, { url, query, variables: { limit }})
if (dataInCache !== null)
return Promise.resolve(dataInCache)
return request(url, query, { limit })
.then((data) => {
SessionCache.add({ url, query, variables: { limit }}, data)
SessionCache.add(sessionStorage, { url, query, variables: { limit }}, data)
return Promise.resolve(data)
})
}
@ -45,12 +45,12 @@ export function getUpcomingEventsByGroupName({ url, limit, groupName }) {
}
`
const afterDatetime = DateTimeWrapper.getCurrentDatetimeAsString()
const dataInCache = SessionCache.get({ url, query, variables: { afterDatetime, groupName, limit }})
const dataInCache = SessionCache.get(sessionStorage, { url, query, variables: { afterDatetime, groupName, limit }})
if (dataInCache !== null)
return Promise.resolve(dataInCache)
return request(url, query, { afterDatetime, groupName, limit })
.then((data) => {
SessionCache.add({ url, query, variables: { afterDatetime, groupName, limit }}, data)
SessionCache.add(sessionStorage, { url, query, variables: { afterDatetime, groupName, limit }}, data)
return Promise.resolve(data)
})
}

View File

@ -7,7 +7,7 @@ test.beforeEach(() => {
global.document = new JSDOM().window.document
})
test('createAnchorElement() usual parameters', t => {
test('#createAnchorElement usual parameters', t => {
const a = HtmlCreator.createAnchorElement({ text: 'a', url: 'b' })
t.is(a.tagName, 'A')
t.is(a.innerHTML, 'a')

View File

@ -1,5 +1,5 @@
import test from 'ava'
import { hash } from './object-hash-wrapper'
import hash from './object-hash-wrapper'
test('#hash object', t => {
t.is(hash({foo: 'bar'}), 'a75c05bdca7d704bdfcd761913e5a4e4636e956b')

View File

@ -0,0 +1,34 @@
import test from 'ava'
import { SessionCache } from './session-cache'
const fakeStorage = {
elements: {},
clear() {
this.elements = {}
},
getItem(key) {
const value = this.elements[key]
if (value === undefined) return null
return value
},
setItem(key, value) {
this.elements[key] = value
}
}
test.afterEach(() => {
fakeStorage.clear()
})
test('#add & #get', t => {
SessionCache.add(fakeStorage, { a: 'b' }, { c: 'd' })
t.deepEqual(SessionCache.get(fakeStorage, { a: 'b' }), { c: 'd' })
})
test('#get no entry', t => {
t.is(SessionCache.get(fakeStorage, { a: 'bb' }), null)
})

View File

@ -4,20 +4,20 @@ const MAX_AGE_IN_MS = 120000
export class SessionCache {
static add(parameters, data) {
static add(storage, parameters, data) {
const key = hash(parameters)
const timestamp = Date.now()
const value = {
data,
timestamp,
}
sessionStorage.setItem(key, JSON.stringify(value))
storage.setItem(key, JSON.stringify(value))
}
static get(parameters) {
static get(storage, parameters) {
const key = hash(parameters)
const value = JSON.parse(sessionStorage.getItem(key))
if (value.timestamp && value.timestamp > Date.now() - MAX_AGE_IN_MS)
const value = JSON.parse(storage.getItem(key))
if (value && value.timestamp && value.timestamp > Date.now() - MAX_AGE_IN_MS)
return value.data
return null
}