2020-11-28 02:46:49 +00:00
|
|
|
const assert = require('assert');
|
2020-11-28 03:26:31 +00:00
|
|
|
const rimraf = require('rimraf');
|
2020-11-28 02:46:49 +00:00
|
|
|
const path = require('path');
|
2020-11-28 03:26:31 +00:00
|
|
|
const FetchCache = require('../index.js');
|
2020-11-28 15:59:56 +00:00
|
|
|
const { URLSearchParams } = require('url');
|
2020-11-28 03:26:31 +00:00
|
|
|
|
|
|
|
const CACHE_PATH = path.join(__dirname, '..', '.cache');
|
2020-11-28 02:46:49 +00:00
|
|
|
|
|
|
|
const TWO_HUNDRED_URL = 'https://httpbin.org/status/200';
|
|
|
|
const FOUR_HUNDRED_URL = 'https://httpbin.org/status/400';
|
|
|
|
const THREE_HUNDRED_TWO_URL = 'https://httpbin.org/status/302';
|
2020-11-28 03:26:31 +00:00
|
|
|
const TEXT_BODY_URL = 'https://httpbin.org/robots.txt';
|
|
|
|
const TEXT_BODY_EXPECTED = 'User-agent: *\nDisallow: /deny\n';
|
|
|
|
|
|
|
|
let fetch;
|
|
|
|
let res;
|
|
|
|
let body;
|
|
|
|
|
2020-11-28 15:59:56 +00:00
|
|
|
function post(body) {
|
|
|
|
return { method: 'POST', body };
|
|
|
|
}
|
|
|
|
|
2020-11-28 03:26:31 +00:00
|
|
|
beforeEach(async function() {
|
|
|
|
rimraf.sync(CACHE_PATH);
|
|
|
|
fetch = FetchCache(CACHE_PATH);
|
|
|
|
});
|
2020-11-28 02:46:49 +00:00
|
|
|
|
|
|
|
describe('Basic property tests', function() {
|
|
|
|
it('Has a status property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.status, 200);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.strictEqual(res.status, 200);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Has a statusText property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.strictEqual(res.statusText, 'OK');
|
|
|
|
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.statusText, 'OK');
|
2020-11-28 02:46:49 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
it('Has a url property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.strictEqual(res.url, TWO_HUNDRED_URL);
|
|
|
|
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.url, TWO_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
it('Has an ok property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(FOUR_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.ok, false);
|
|
|
|
assert.strictEqual(res.status, 400);
|
|
|
|
|
|
|
|
res = await fetch(FOUR_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.strictEqual(res.ok, false);
|
|
|
|
assert.strictEqual(res.status, 400);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Has a headers property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.notStrictEqual(res.headers, undefined);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.notStrictEqual(res.headers, undefined);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Has a redirected property', async function() {
|
2020-11-28 03:26:31 +00:00
|
|
|
res = await fetch(THREE_HUNDRED_TWO_URL);
|
2020-11-28 02:46:49 +00:00
|
|
|
assert.strictEqual(res.redirected, true);
|
2020-11-28 03:26:31 +00:00
|
|
|
|
|
|
|
res = await fetch(THREE_HUNDRED_TWO_URL);
|
|
|
|
assert.strictEqual(res.redirected, true);
|
|
|
|
});
|
|
|
|
}).timeout(10000);
|
|
|
|
|
|
|
|
describe('Cache tests', function() {
|
|
|
|
it('Uses cache', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, true);
|
|
|
|
});
|
2020-11-28 03:27:59 +00:00
|
|
|
|
|
|
|
it('Can eject from cache', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, true);
|
|
|
|
|
|
|
|
await res.ejectFromCache();
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, true);
|
|
|
|
});
|
2020-11-28 04:31:39 +00:00
|
|
|
|
|
|
|
it('Does not error if rejecting from cache twice', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL);
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
await res.ejectFromCache();
|
|
|
|
await res.ejectFromCache();
|
|
|
|
});
|
2020-11-28 15:59:56 +00:00
|
|
|
|
|
|
|
it('Gives different string bodies different cache keys', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post('a'));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post('b'));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Gives same string bodies same cache keys', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post('a'));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post('a'));
|
|
|
|
assert.strictEqual(res.fromCache, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Gives different URLSearchParams different cache keys', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post(new URLSearchParams('a=a')));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post(new URLSearchParams('a=b')));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Gives same URLSearchParams same cache keys', async function() {
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post(new URLSearchParams('a=a')));
|
|
|
|
assert.strictEqual(res.fromCache, false);
|
|
|
|
|
|
|
|
res = await fetch(TWO_HUNDRED_URL, post(new URLSearchParams('a=a')));
|
|
|
|
assert.strictEqual(res.fromCache, true);
|
|
|
|
});
|
2020-11-28 03:26:31 +00:00
|
|
|
}).timeout(10000);
|
|
|
|
|
|
|
|
describe('Data tests', function() {
|
|
|
|
it('Can get text body', async function() {
|
|
|
|
res = await fetch(TEXT_BODY_URL);
|
|
|
|
body = await res.text();
|
|
|
|
assert.strictEqual(body, TEXT_BODY_EXPECTED);
|
|
|
|
|
|
|
|
res = await fetch(TEXT_BODY_URL);
|
|
|
|
body = await res.text();
|
|
|
|
assert.strictEqual(body, TEXT_BODY_EXPECTED);
|
2020-11-28 02:46:49 +00:00
|
|
|
});
|
2020-11-28 03:26:31 +00:00
|
|
|
}).timeout(10000);
|