UNPKG

@zargu/couchdb-designer

Version:

Create and testing couchdb design document form directory structure.

107 lines (89 loc) 3.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _testEnvironment = require("../../build/testing/testEnvironment"); var _getBuiltInPolicy = _interopRequireDefault(require("../util/getBuiltInPolicy")); var _supplementRequest = _interopRequireDefault(require("../util/supplementRequest")); var _builtInFunction = _interopRequireDefault(require("../builtin/builtInFunction")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const callingErrors = { Emit: "Calling 'emit' allows only in view's map function!", Require: "Calling 'require' from reduce function in is not allowed and useless from library!", GetRow: "Calling 'getRow' allows only in list functions!", Provides: "Calling 'provides' allows only in list and show functions!", RegisterType: "Calling 'registerType' allows only in list and show functions!", Start: "Calling 'start' allows only in list functions!", Send: "Calling 'send' allows only in list functions!", Index: "Calling 'index' allows only in index functions!" }; const hasJest = Boolean(process.env.JEST_WORKER_ID); const createMockFunction = (fileStats, contextProps, name, designFunction) => { let policy = (0, _getBuiltInPolicy.default)(fileStats, contextProps, name); const { buildIns } = (0, _testEnvironment.getTestContext)(contextProps.contextId); const mockFunction = (...args) => { for (let allowed of policy.allowed) { if (allowed === 'Emit') { buildIns.environmentEmit.mockImplementation((...emitargs) => buildIns.contextedEmit(args[0], ...emitargs)); } else if (allowed === 'Require') { buildIns.environmentRequire.mockImplementation(requirePath => { if (policy.allowed.includes('Emit') && requirePath.indexOf('views') !== 0) { throw { testError: `The map function can only require library from under views section! You can fix it in ${fileStats.filePath}` }; } if (contextProps.name) { return buildIns.contextedRequire(requirePath, contextProps.name); } else { return buildIns.contextedRequire(requirePath); } }); } else { buildIns[`environment${allowed}`].mockImplementation((...builtInArgs) => buildIns[`contexted${allowed}`](...builtInArgs)); } } for (let denied of policy.denied) { buildIns[`environment${denied}`].mockImplementation(() => { throw { testError: `${callingErrors[denied]} You can fix it in ${fileStats.filePath}`, errorType: denied }; }); } if (policy.uri) { args[1] = (0, _supplementRequest.default)(args[1], null, contextProps.contextId, policy.uri); } let result; if (fileStats.isLib) { try { result = designFunction(...args); } catch (err) { if (err.testError) { throw new Error(`${callingErrors[err.errorType]} You can fix it in ${fileStats.filePath}`); } else { throw new Error(`Your library ${fileStats.filePath} throw error: ${err.message}`); } } } else { try { result = designFunction(...args); } catch (designError) { if (designError.testError) { throw designError.testError; } else { throw `Your function ${name} from ${fileStats.filePath} throw error: ${designError.message}`; } } } if (fileStats.isLib) { buildIns.environmentRequire.mockImplementation(requirePath => buildIns.contextedRequire(requirePath)); } return result; }; return hasJest ? jest.fn(mockFunction) : (0, _builtInFunction.default)(mockFunction); }; var _default = createMockFunction; exports.default = _default;