You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.0 KiB

import test from 'ava';
import got from '../';
import {createServer} from './helpers/server';
let s;
test.before('setup', async () => {
s = await createServer();
let noCacheIndex = 0;
s.on('/no-cache', (req, res) => {
noCacheIndex++;
res.end(noCacheIndex.toString());
});
let cacheIndex = 0;
s.on('/cache', (req, res) => {
cacheIndex++;
res.setHeader('Cache-Control', 'public, max-age=60');
res.end(cacheIndex.toString());
});
await s.listen(s.port);
});
test('Non cacheable requests are not cached', async t => {
const endpoint = '/no-cache';
const cache = new Map();
const firstResponse = parseInt((await got(s.url + endpoint, {cache})).body, 10);
const secondResponse = parseInt((await got(s.url + endpoint, {cache})).body, 10);
t.is(secondResponse, (firstResponse + 1));
});
test('Cacheable requests are cached', async t => {
const endpoint = '/cache';
const cache = new Map();
const firstResponse = await got(s.url + endpoint, {cache});
const secondResponse = await got(s.url + endpoint, {cache});
t.is(firstResponse.body, secondResponse.body);
});
test('Binary responses are cached', async t => {
const endpoint = '/cache';
const cache = new Map();
const encoding = null;
const firstResponse = await got(s.url + endpoint, {cache, encoding});
const secondResponse = await got(s.url + endpoint, {cache, encoding});
t.is(firstResponse.body.toString(), secondResponse.body.toString());
});
test('Cached response is re-encoded to current encoding option', async t => {
const endpoint = '/cache';
const cache = new Map();
const firstEncoding = 'base64';
const secondEncoding = 'hex';
const firstResponse = await got(s.url + endpoint, {cache, encoding: firstEncoding});
const secondResponse = await got(s.url + endpoint, {cache, encoding: secondEncoding});
const expectedSecondResponseBody = Buffer.from(firstResponse.body, firstEncoding).toString(secondEncoding);
t.is(secondResponse.body, expectedSecondResponseBody);
});
test.after('cleanup', async () => {
await s.close();
});