@contract-case/case-core
Version:
Core functionality for the ContractCase contract testing suite
87 lines • 4.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeExample = void 0;
const case_plugin_base_1 = require("@contract-case/case-plugin-base");
const setup_1 = require("./setup");
const triggers_1 = require("./triggers");
const results_1 = require("../../entities/results");
const entities_1 = require("../../entities");
const errorToFailedExample = (error, example, context) => {
if (error instanceof case_plugin_base_1.VerifyTriggerReturnObjectError) {
return (0, entities_1.makeFailedExample)(example, (0, case_plugin_base_1.makeResults)((0, results_1.verificationError)(error, context)));
}
if (error instanceof case_plugin_base_1.CaseConfigurationError ||
error instanceof case_plugin_base_1.StripUnsupportedError) {
return (0, entities_1.makeFailedExample)(example, (0, case_plugin_base_1.makeResults)((0, results_1.configurationError)(error, context)));
}
if (error instanceof case_plugin_base_1.CaseTriggerError) {
return (0, entities_1.makeFailedExample)(example, (0, case_plugin_base_1.makeResults)((0, results_1.triggerError)(error, context)));
}
if (error instanceof entities_1.CaseFailedAssertionError) {
return (0, entities_1.makeFailedExample)(example, error.matchResult);
}
if (error instanceof case_plugin_base_1.CaseCoreError) {
throw error;
}
return (0, entities_1.makeFailedExample)(example, (0, case_plugin_base_1.makeResults)((0, results_1.configurationError)(error, context)));
};
const assertableToExample = (assertable, example, context) => assertable.assert().then((matchResult) => {
if ((0, case_plugin_base_1.hasErrors)(matchResult)) {
context.logger.debug(`This interaction failed the assertions`);
return (0, entities_1.makeFailedExample)(example, matchResult);
}
context.logger.debug(`This interaction passed all assertions`);
return (0, entities_1.makeSuccessExample)(example);
}, (error) => {
context.logger.debug(`This interaction failed while trying to run the assertion`);
return errorToFailedExample(error, example, context);
});
const renderStackTrace = (e) => {
if (e != null && typeof e === 'object' && 'userFacingStackTrace' in e) {
return e.userFacingStackTrace;
}
return e.stack;
};
const executeExample = (unnamedExample, { stateHandlers = {}, trigger, triggers, names, testErrorResponse, triggerAndTest, triggerAndTests, testResponse, }, contract, context) => Promise.resolve()
.then(() => ({
...unnamedExample,
mock: (0, case_plugin_base_1.nameMock)(unnamedExample.mock, context),
}))
.then(async (example) => ({
assertable: await (0, setup_1.setupExample)(example, stateHandlers, context),
example,
}))
.then(({ assertable, example }) => {
context.logger.debug(`Invoking trigger with the following InteractionSetup`, assertable.config);
return (0, triggers_1.findAndCallTrigger)(example.mock, {
trigger,
triggers,
names,
testErrorResponse,
triggerAndTest,
triggerAndTests,
testResponse,
}, assertable, context).then(() => {
context.logger.maintainerDebug(`Asserting result`);
return assertableToExample(assertable, example, context);
}, async (error) => {
context.logger.debug(`This interaction failed while trying to invoke the trigger function.`, error.message, `Stack trace follows.`, renderStackTrace(error));
// We still need to drain the assertable
context.logger.maintainerDebug(`Draining assertable and ignoring the result`);
await assertable.assert().catch(() => { });
const resultingExample = errorToFailedExample(error, example, context);
context.logger.deepMaintainerDebug('The resulting failure is:', resultingExample);
return resultingExample;
});
}, (error) => {
context.logger.maintainerDebug('An error was thrown by setupExample', error);
const resultingExample = (0, entities_1.makeFailedExample)(unnamedExample, (0, case_plugin_base_1.makeResults)((0, results_1.configurationError)(error, context)));
context.logger.deepMaintainerDebug('The new resulting failure is:', resultingExample);
return resultingExample;
})
.then((resultingExample) => {
context.logger.maintainerDebug('Resulting example was', resultingExample);
return (0, results_1.handleResult)(contract.recordExample(resultingExample, context), context['_case:currentRun:context:testName'], context);
});
exports.executeExample = executeExample;
//# sourceMappingURL=executeExample.js.map