@dasch-swiss/dsp-js
Version:
JavaScript library that handles API requests to Knora
68 lines • 3.19 kB
JavaScript
import { of } from "rxjs";
import { switchMap } from "rxjs";
import { TestScheduler } from "rxjs/testing";
import { retryOnError } from "./retryOnError";
describe("RetryOnError Operator", function () {
var scheduler;
// https://stackoverflow.com/questions/57406445/rxjs-marble-testing-retrywhen
var createRetryableStream = function () {
var _a;
var obs$ = [];
for (var _i = 0; _i < arguments.length; _i++) {
obs$[_i] = arguments[_i];
}
var http = jasmine.createSpy("http");
(_a = http.and).returnValues.apply(_a, obs$);
return of(undefined).pipe(switchMap(function () { return http(); }));
};
beforeEach(function () {
scheduler = new TestScheduler(function (actual, expected) {
expect(actual).toEqual(expected);
});
});
it("should get a completed response", function () {
scheduler.run(function (_a) {
var cold = _a.cold, expectObservable = _a.expectObservable;
var values = { a: 20 };
var source$ = createRetryableStream(cold("a|", values));
var expectedMarble = "a|";
var expectedValues = { a: 20 };
var result$ = source$.pipe(retryOnError(1, 1, [0], true));
expectObservable(result$).toBe(expectedMarble, expectedValues);
});
});
it("should get a completed response after 1 unsuccessful request", function () {
scheduler.run(function (_a) {
var cold = _a.cold, expectObservable = _a.expectObservable;
var values = { a: 20 };
var ajaxError = { status: 0 };
var source$ = createRetryableStream(cold("#", undefined, ajaxError), cold("a|", values));
var expectedMarble = "-a|";
var expectedValues = { a: 20 };
var result$ = source$.pipe(retryOnError(1, 1, [0], true));
expectObservable(result$).toBe(expectedMarble, expectedValues);
});
});
it("should get an error after 2 unsuccessful requests", function () {
scheduler.run(function (_a) {
var cold = _a.cold, expectObservable = _a.expectObservable;
var values = { a: 20 };
var ajaxError = { status: 0 };
var source$ = createRetryableStream(cold("#", undefined, ajaxError), cold("#", undefined, ajaxError), cold("a|", values));
var expectedMarble = "-#";
var result$ = source$.pipe(retryOnError(1, 1, [0], true));
expectObservable(result$).toBe(expectedMarble, undefined, ajaxError);
});
});
it("should not retry on certain error status", function () {
scheduler.run(function (_a) {
var cold = _a.cold, expectObservable = _a.expectObservable;
var ajaxError = { status: 400 };
var source$ = createRetryableStream(cold("#", undefined, ajaxError), cold("#", undefined, ajaxError));
var expectedMarble = "#";
var result$ = source$.pipe(retryOnError(1, 1, [0], true));
expectObservable(result$).toBe(expectedMarble, undefined, ajaxError);
});
});
});
//# sourceMappingURL=retryOnError.spec.js.map