UNPKG

@typed/http

Version:

HTTP requests for node and browsers

62 lines 1.99 kB
import { Disposable } from '@typed/disposable'; import { fromLeft, fromRight, isLeft, Left, Right } from '@typed/either'; import { isPromiseLike } from '@typed/logic'; /** * Create a test-friendly http environment * @param testHttp :: (url -> HttpOptions -> Either Error HttpResponse) * @param timer :: Timer */ export function createTestHttpEnv(testHttp) { const responses = []; function http(url, options, callbacks) { const { success, failure } = callbacks; function getResponse() { const disposable = Disposable.lazy(); function onResponse(response) { responses.push(response); if (isLeft(response)) { return disposable.addDisposable(failure(fromLeft(response))); } disposable.addDisposable(success(fromRight(response))); } const response = testHttp(url, options); if (isPromiseLike(response)) { response.then(onResponse); } else { onResponse(response); } return disposable; } return getResponse(); } return { http, getResponses: () => responses.slice(), }; } export function createSuccessfulResponse(options = {}) { return Right.of(createHttpResponse(options)); } export function createFailedResponse(error) { return Left.of(error); } export function createHttpResponse(options = {}) { const response = { status: 200, statusText: 'OK', responseText: '', headers: {}, ...options, }; return response; } export function createJsonResponse(jsonReadyValue, options = {}) { const responseText = JSON.stringify(jsonReadyValue); return createHttpResponse({ ...options, headers: { 'Content-Type': 'application/json', ...options.headers }, responseText, }); } //# sourceMappingURL=createTestHttpEnv.js.map