@hirez_io/auto-spies-core
Version:
Create automatic spies from classes in tests, also for promises and observables, used as a common code for jasmine-auto-spies and jest-auto-spies
101 lines • 4.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createObservablePropSpy = exports.addObservableHelpersToCalledWithObject = exports.addObservableHelpersToFunctionSpy = void 0;
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var merge_subject_with_default_values_1 = require("./merge-subject-with-default-values");
function addObservableHelpersToFunctionSpy(
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
spyFunction, valueContainer) {
var subject = createReplaySubject();
addObservableHelpers(spyFunction, subject, function (configuredSubject) {
valueContainer.value = configuredSubject;
});
addNextWithPerCall(spyFunction, valueContainer);
}
exports.addObservableHelpersToFunctionSpy = addObservableHelpersToFunctionSpy;
function addObservableHelpersToCalledWithObject(calledWithObject, calledWithArgs) {
//
var subject = createReplaySubject();
var returnValueContainer = { value: undefined };
addObservableHelpers(calledWithObject, subject, function (configuredSubject) {
returnValueContainer.value = configuredSubject;
calledWithObject.argsToValuesMap.set(calledWithArgs, returnValueContainer);
});
addNextWithPerCall(calledWithObject, returnValueContainer, function (configuredReturnValueContainer) {
calledWithObject.argsToValuesMap.set(calledWithArgs, configuredReturnValueContainer);
});
return calledWithObject;
}
exports.addObservableHelpersToCalledWithObject = addObservableHelpersToCalledWithObject;
function createObservablePropSpy() {
var subject = createReplaySubject();
var observableSpy = (0, rxjs_1.defer)(function () { return subject; });
addObservableHelpers(observableSpy, subject, function (configuredSubject) {
subject = configuredSubject;
});
return observableSpy;
}
exports.createObservablePropSpy = createObservablePropSpy;
function addObservableHelpers(objectToDecorate, providedSubject, onSubjectConfiguredCallback) {
objectToDecorate.nextWith = function nextWith(value) {
providedSubject.next(value);
onSubjectConfiguredCallback(providedSubject);
};
objectToDecorate.nextOneTimeWith = function nextOneTimeWith(value) {
providedSubject.next(value);
providedSubject.complete();
onSubjectConfiguredCallback(providedSubject);
};
objectToDecorate.nextWithValues = function nextWithValues(valuesConfigs) {
/* istanbul ignore else */
if (valuesConfigs && valuesConfigs.length > 0) {
var results$ = (0, merge_subject_with_default_values_1.mergeSubjectWithDefaultValues)(providedSubject, valuesConfigs);
onSubjectConfiguredCallback(results$);
}
};
objectToDecorate.throwWith = function throwWith(value) {
providedSubject.error(value);
onSubjectConfiguredCallback(providedSubject);
};
objectToDecorate.complete = function complete() {
providedSubject.complete();
onSubjectConfiguredCallback(providedSubject);
};
objectToDecorate.returnSubject = function returnSubject() {
onSubjectConfiguredCallback(providedSubject);
return providedSubject;
};
}
function createReplaySubject() {
return new rxjs_1.ReplaySubject(1);
}
function addNextWithPerCall(objectToDecorate, returnValueContainer, onValuesPerCallConfigured) {
if (onValuesPerCallConfigured === void 0) { onValuesPerCallConfigured = function noop() { }; }
objectToDecorate.nextWithPerCall = function nextWithPerCall(valueConfigsPerCall) {
var returnedSubjects = [];
/* istanbul ignore else */
if (valueConfigsPerCall && valueConfigsPerCall.length > 0) {
returnValueContainer.valuesPerCalls = [];
valueConfigsPerCall.forEach(function (valueConfiguration) {
var replaySubject = new rxjs_1.ReplaySubject(1);
replaySubject.next(valueConfiguration.value);
returnedSubjects.push(replaySubject);
var returnedObservable = replaySubject.asObservable();
if (valueConfiguration.delay) {
returnedObservable = returnedObservable.pipe((0, operators_1.delay)(valueConfiguration.delay));
}
if (!valueConfiguration.doNotComplete) {
returnedObservable = returnedObservable.pipe((0, operators_1.take)(1));
}
/* istanbul ignore else */
if (returnValueContainer.valuesPerCalls) {
returnValueContainer.valuesPerCalls.push({ wrappedValue: returnedObservable });
}
});
onValuesPerCallConfigured(returnValueContainer);
}
return returnedSubjects;
};
}
//# sourceMappingURL=observable-spy-utils.js.map