unmock-core
Version:
[][npmjs] [](https://circleci.com/gh/unmock/unmock-js) [](h
91 lines • 3.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const interfaces_1 = require("../interfaces");
const chooseDeepestMissingParam = (errorList, initError) => errorList.reduce((err, cerr) => err === undefined || err.nestedLevel < cerr.nestedLevel ? cerr : err, initError);
const validStatesForStateWithCode = (response, state, code) => {
if (response === undefined ||
interfaces_1.isReference(response) ||
response.content === undefined) {
return {
error: {
msg: `Can't find response for given status code '${code}'!`,
nestedLevel: -1,
},
};
}
const stateMedia = getStateFromMedia(response.content, state);
const error = chooseDeepestMissingParam(stateMedia.errors);
return {
responses: { [code]: stateMedia.responses },
error,
};
};
const validStatesForStateWithoutCode = (operationResponses, state) => {
const relevantResponses = {};
let err;
for (const code of Object.keys(operationResponses)) {
const { responses, error } = validStatesForStateWithCode(operationResponses[code], state, code);
err = error === undefined ? err : chooseDeepestMissingParam([error], err);
if (responses === undefined) {
continue;
}
const resp = responses[code];
const filteredStateMedia = Object.keys(resp).reduce((acc, contentType) => Object.keys(resp[contentType]).length > 0
? Object.assign(acc, { [contentType]: resp[contentType] })
: acc, {});
if (Object.keys(filteredStateMedia).length > 0) {
relevantResponses[code] = filteredStateMedia;
}
}
return Object.keys(relevantResponses).length > 0
? { responses: relevantResponses }
: { error: err };
};
exports.getValidStatesForOperationWithState = (operation, state) => {
const resps = operation.responses;
const code = state.top.$code;
const { responses, error } = code !== undefined
?
validStatesForStateWithCode(resps[String(code)], state, code)
:
validStatesForStateWithoutCode(resps, state);
return { responses, error: error === undefined ? error : error.msg };
};
const getStateFromMedia = (contentRecord, state) => {
const errors = [];
const relevantResponses = {};
for (const contentType of Object.keys(contentRecord)) {
const content = contentRecord[contentType];
if (content === undefined || content.schema === undefined) {
errors.push({
msg: `No schema defined in '${JSON.stringify(content)}'!`,
nestedLevel: -1,
});
continue;
}
const spreadState = state.gen(content.schema);
const missingParam = DFSVerifyNoneAreNull(spreadState);
if (missingParam !== undefined) {
errors.push(missingParam);
}
else {
relevantResponses[contentType] = spreadState;
}
}
return { responses: relevantResponses, errors };
};
const DFSVerifyNoneAreNull = (obj, nestedLevel = 0) => {
for (const key of Object.keys(obj)) {
if (obj[key] === null) {
return {
msg: `Can't find definition for '${key}', or its type is incorrect`,
nestedLevel,
};
}
if (typeof obj[key] === "object") {
return DFSVerifyNoneAreNull(obj[key], nestedLevel + 1);
}
}
return undefined;
};
//# sourceMappingURL=validator.js.map