vulcain-corejs
Version:
Vulcain micro-service framework
97 lines (95 loc) • 2.69 kB
JavaScript
"use strict";
class MockManager {
constructor(mocks) {
this.mocks = this.toJsonLowercase(mocks);
}
toJsonLowercase(json) {
if (!json)
return null;
let res = {};
for (let key of Object.keys(json)) {
let val = json[key];
key = key.toLowerCase();
if (Array.isArray(val)) {
res[key] = [];
for (let item of val) {
res[key].push(this.toJsonLowercase(item));
}
}
else if (typeof val === "object") {
res[key] = this.toJsonLowercase(val);
}
else {
res[key] = val;
}
}
return res;
}
deepCompare(a, b) {
if (!b) {
return true;
}
if (!a) {
return false;
}
for (let p of Object.keys(b)) {
let val = b[p];
if (typeof val === "object") {
if (!this.deepCompare(a[p], val)) {
return false;
}
continue;
}
if (Array.isArray(val)) {
let val2 = a[p];
if (val.length !== val2.length) {
return false;
}
for (let i; i < val.length; i++) {
if (!this.deepCompare(val2[i], val[i])) {
return false;
}
}
continue;
}
if (a[p] !== val) {
return false;
}
}
return true;
}
applyMockHttp(url, verb) {
let mock = this.mocks.http[url];
mock = mock && mock[verb];
return (mock && mock.output) || undefined;
}
applyMockService(serviceName, serviceVersion, verb, data) {
if (!serviceName)
return;
let mockService = this.mocks.services[serviceName.toLowerCase()];
mockService = (mockService && mockService[serviceVersion]) || mockService;
if (!mockService) {
return;
}
let mock = verb && mockService[verb.toLowerCase()];
if (!mock) {
return;
}
if (!Array.isArray(mock)) {
return mock;
}
for (let item of mock) {
let input = item.input;
if (!input) {
continue;
}
let ok = true;
if (this.deepCompare(data, input)) {
return item.output;
}
}
return;
}
}
exports.MockManager = MockManager;
//# sourceMappingURL=mockManager.js.map