react-http-fetch
Version:
An http library for React JS built on top of native JS fetch
88 lines (87 loc) • 4.67 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { HttpCacheFixture } from './fixtures/http-cache.fixture';
import { HttpRequestFixture } from './fixtures/http-request.fixture';
describe('http-fetch', function () {
afterEach(function () {
jest.useRealTimers();
});
beforeEach(function () {
jest.useFakeTimers();
jest.spyOn(global, 'setTimeout');
});
test('should return undefined if no cached entry is found for the given identifier', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create();
var cachedEntry = httpCache.get(httpRequest);
expect(cachedEntry).toBeUndefined();
});
test('should return the cached entry corresponding to the provided identifier', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000 }));
var cachedResponse = { name: 'Phelony' };
httpCache.put(httpRequest, cachedResponse);
var expiredCachedResponse = httpCache.get(httpRequest);
expect(expiredCachedResponse).toEqual(cachedResponse);
expect(setTimeout).toHaveBeenCalledTimes(1);
expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 6000);
});
test('should remove the cached entry once expired', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000 }));
var httpResponse = { name: 'Phelony' };
httpCache.put(httpRequest, httpResponse);
var cachedResponse = httpCache.get(httpRequest);
expect(cachedResponse).toEqual(httpResponse);
expect(setTimeout).toHaveBeenCalledTimes(1);
expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 6000);
jest.runOnlyPendingTimers();
var expiredCachedResponse = httpCache.get(httpRequest);
expect(expiredCachedResponse).toBeUndefined();
});
test('should tell if a cached response for a given request is expired', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000 }));
httpCache.put(httpRequest, {});
expect(httpCache.isExpired(httpRequest)).toBe(false);
jest.runOnlyPendingTimers();
expect(httpCache.isExpired(httpRequest)).toBe(true);
});
test('should tell if there is a cached response for the given request', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000 }));
httpCache.put(httpRequest, {});
expect(httpCache.has(httpRequest)).toBe(true);
jest.runOnlyPendingTimers();
expect(httpCache.has(httpRequest)).toBe(false);
});
test('should prune the cache by removing any expired entry', function () {
var httpCache = HttpCacheFixture.create();
var httpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000 }));
httpCache.put(httpRequest, {});
expect(httpCache.has(httpRequest)).toBe(true);
jest.runOnlyPendingTimers();
expect(httpCache.has(httpRequest)).toBe(false);
});
test('should flush the cache by removing all entries', function () {
var httpCache = HttpCacheFixture.create();
var firstHttpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000, relativeUrl: 'posts' }));
var secondHttpRequest = HttpRequestFixture.create(__assign(__assign({}, HttpRequestFixture.defaultOptions), { maxAge: 6000, relativeUrl: 'comments' }));
httpCache.put(firstHttpRequest, {});
httpCache.put(secondHttpRequest, {});
expect(httpCache.has(firstHttpRequest)).toBe(true);
expect(httpCache.has(secondHttpRequest)).toBe(true);
httpCache.flush();
expect(httpCache.has(firstHttpRequest)).toBe(false);
expect(httpCache.has(secondHttpRequest)).toBe(false);
});
});