|
|
|
import test from 'ava';
|
|
|
|
import tk from 'timekeeper';
|
|
|
|
import subSeconds from 'date-fns/sub_seconds';
|
|
|
|
import expired from '../';
|
|
|
|
|
|
|
|
test('expired.in is a function', t => {
|
|
|
|
t.is(typeof expired.in, 'function');
|
|
|
|
});
|
|
|
|
|
|
|
|
test('expired.in returns positive ms for valid cache', t => {
|
|
|
|
const date = new Date().toUTCString();
|
|
|
|
const maxAge = 300;
|
|
|
|
const headers = {
|
|
|
|
date: date,
|
|
|
|
age: 0,
|
|
|
|
'cache-control': `public, max-age=${maxAge}`
|
|
|
|
};
|
|
|
|
|
|
|
|
tk.freeze(date);
|
|
|
|
t.is(expired.in(headers), maxAge * 1000);
|
|
|
|
tk.reset();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('expired.in returns zero ms for instantly stale cache', t => {
|
|
|
|
const date = new Date().toUTCString();
|
|
|
|
const headers = {
|
|
|
|
date: date,
|
|
|
|
age: 0,
|
|
|
|
'cache-control': `public, max-age=0`
|
|
|
|
};
|
|
|
|
|
|
|
|
tk.freeze(date);
|
|
|
|
t.is(expired.in(headers), 0);
|
|
|
|
tk.reset();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('expired.in returns negative ms for stale cache', t => {
|
|
|
|
const date = new Date().toUTCString();
|
|
|
|
const dateOffset = 600;
|
|
|
|
const maxAge = 300;
|
|
|
|
const headers = {
|
|
|
|
date: subSeconds(date, dateOffset).toUTCString(),
|
|
|
|
age: 0,
|
|
|
|
'cache-control': `public, max-age=${maxAge}`
|
|
|
|
};
|
|
|
|
|
|
|
|
tk.freeze(date);
|
|
|
|
t.is(expired.in(headers), (maxAge - dateOffset) * 1000);
|
|
|
|
tk.reset();
|
|
|
|
});
|