@case-contract-testing/case
Version:
Next-generation contract testing suite
63 lines (62 loc) • 4.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.findAndCallTrigger = void 0;
const entities_1 = require("../../entities");
const results_1 = require("../../entities/results");
const invokeTrigger = (trigger, testResponse, config) => trigger(config).then((response) => {
try {
return testResponse(response, config);
}
catch (e) {
throw new entities_1.VerifyTriggerReturnObjectError(e);
}
});
const invokeFailingTrigger = (trigger, testErrorResponse, config, context) => trigger(config).then((data) => {
throw new entities_1.CaseFailedAssertionError((0, results_1.makeResults)((0, results_1.failedExpectationError)(`Expected the provided trigger to throw an error, but instead it was ${data}'`, data, 'TriggerWasMeantToFail', context, 'A rejecting Promise object')));
}, (actualError) => Promise.resolve()
.then(() => testErrorResponse(actualError, config))
.catch((err) => {
throw new entities_1.VerifyTriggerReturnObjectError(err);
}));
const findAndCallTrigger = (mock, { trigger, triggers, names, testErrorResponse, testResponse, }, assertable, context) => {
context.logger.maintainerDebug(`In this mock (${mock['case:mock:type']}), in '${context['case:currentRun:context:contractMode']}' mode, the triggers are ${mock['case:run:context:setup'][context['case:currentRun:context:contractMode']].triggers}`);
if (mock['case:run:context:setup'][context['case:currentRun:context:contractMode']].triggers === 'generated') {
context.logger.maintainerDebug("Triggers don't exist for this mock type; skipping");
return Promise.resolve();
}
if (trigger !== undefined) {
if (testErrorResponse === undefined && testResponse === undefined) {
throw new entities_1.CaseCoreError('callTrigger received a trigger, but with no testErrorResponse or testResponse supplied\n.This is supposed to be prevented by DefineCaseContract');
}
if (testResponse !== undefined) {
context.logger.debug(`Invoking provided trigger for '${names.requestName}', and testing a successful response`);
return invokeTrigger(trigger, testResponse, assertable.config);
}
if (testErrorResponse !== undefined) {
context.logger.debug(`Invoking provided trigger for '${names.requestName}', and testing a response that is expected to fail`);
return invokeFailingTrigger(trigger, testErrorResponse, assertable.config, context);
}
}
if (triggers !== undefined) {
const req = triggers[names.requestName];
if (req !== undefined) {
context.logger.maintainerDebug('Was provided the request trigger; now finding the result trigger');
const res = req.testResponses?.[names.responseName];
if (res !== undefined) {
context.logger.debug(`Invoking provided trigger for '${names.requestName}', and verification for a successful '${names.responseName}'`);
return invokeTrigger(req.trigger, res, assertable.config);
}
const errRes = req.testErrorResponses?.[names.responseName];
if (errRes !== undefined) {
context.logger.debug(`Invoking provided trigger for '${names.requestName}', and verification for an error '${names.responseName}'`);
return invokeFailingTrigger(req.trigger, errRes, assertable.config, context);
}
context.logger.error(`No verifier or errorVerifier for '${names.responseName}' provided`);
throw new entities_1.CaseConfigurationError(`No verifier or errorVerifier provided for response '${names.responseName}' provided`, context);
}
context.logger.error(`No trigger for request '${names.requestName}' provided`);
throw new entities_1.CaseConfigurationError(`No trigger provided for request '${names.requestName}' provided`, context);
}
throw new entities_1.CaseConfigurationError(`No trigger or trigger map provided for '${names.requestName}', but it expected at least one of these to be set`, context);
};
exports.findAndCallTrigger = findAndCallTrigger;