UNPKG

@contract-case/case-core

Version:

Core functionality for the ContractCase contract testing suite

87 lines 4.61 kB
"use strict"; 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