UNPKG

@magic-num/fileclient

Version:
247 lines (212 loc) 6.55 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _core = require("@magic-num/core"); var _tree = _interopRequireDefault(require("./tree")); var _handler = _interopRequireDefault(require("./handler")); var FileClient = /*#__PURE__*/ function () { function FileClient() { (0, _classCallCheck2.default)(this, FileClient); this.handlers = []; this.mockDelay = false; this.currentTestSuite = null; // 当前选中的TestSuite this.testsuites = {}; } (0, _createClass2.default)(FileClient, [{ key: "addHandler", value: function addHandler(handler) { this.handlers.push(handler); } }, { key: "addTestSuite", value: function addTestSuite(suite) { this.testsuites[suite.name] = suite; } }, { key: "req", value: function req(uri, conf) { return this.request(uri, conf); } }, { key: "request", value: function request(uri) { var conf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (this.currentTestSuite) { if (this.currentTestSuite && this.currentTestSuite.handlers[uri]) { return this.useTestSuite(this.currentTestSuite, uri, conf); } else { throw new Error("Current TestSuite does not contain ".concat(uri)); } } var handler = this.findHandler(uri, conf); return this.executeHandler(handler, conf); } /** * 获得给定接口 * @param {*} uri * @param {*} updateCounter */ }, { key: "filterTestcase", value: function filterTestcase(_ref) { var uri = _ref.uri, _ref$filter = _ref.filter, filter = _ref$filter === void 0 ? function () { return true; } : _ref$filter; var handlers = this.handlers.filter(function (h) { return h.id === uri; }); if (handlers.length === 1) { return handlers[0].filterTestcase(filter, this.coverage); } else { throw new Error("\u8BF7\u6C42".concat(uri, "\u65F6\u53D1\u751F\u9519\u8BEF")); } } /** * 设置当前的testsuite * @param {*} name */ }, { key: "setCurrentSuite", value: function setCurrentSuite(_name) { if (_name === null) { this.currentTestSuite = null; console.info('取消TestSuite设置'); return; } var name = "".concat(_name, ".json"); var h = this.testsuites[name]; if (h) { this.currentTestSuite = h; Object.values(h.handlers).forEach(function (item) { item.counter = 0; }); console.info("TestSuite\u8BBE\u7F6E\u66F4\u65B0\u4E3A".concat(name)); } else { throw new Error("TestSuite ".concat(name, " not exist")); } } /** * 通用testcase匹配 * @param {*} uri * @param {*} conf */ }, { key: "useTestSuite", value: function useTestSuite(suite, uri) { var conf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var matches = this.handlers.filter(function (handler) { return handler.uri.test(uri); }); if (matches.length === 1) { var h = matches[0]; conf.accept = suite.accept(h); if (h.counter) { h.counter++; } else { h.counter = 1; } conf.counter = h.counter; return this.executeHandler(h, conf); } else { return Promise.reject(new Error("".concat(uri, "\u5339\u914D\u5230").concat(matches.length, "\u4E2A\u7ED3\u679C"))); } } }, { key: "executeHandler", value: function executeHandler(handler, conf) { var _this = this; return new Promise(function (resolve, reject) { if (_this.coverage === true) { conf.__coverage__ = true; } try { if (_this.mockDelay) { setTimeout(function () { resolve(handler.execute(conf)); }, Math.random() * 500 + 500); } else { resolve(handler.execute(conf)); } } catch (e) { reject(e); } }); } /** * 获得给定接口 * @param {*} uri * @param {*} updateCounter */ }, { key: "findHandler", value: function findHandler(uri) { var handlers = this.handlers.filter(function (h) { return h.id === uri; }); if (handlers.length === 1) { return handlers[0]; } else { throw new Error("\u8BF7\u6C42".concat(uri, "\u65F6\u53D1\u751F\u9519\u8BEF")); } } }, { key: "getTestSuites", value: function getTestSuites(folder) { var _this2 = this; var files = _fs.default.readdirSync(folder); var items = files.filter(function (f) { return /\.json$/i.test(f); }).map(function (file) { return { name: file, path: _path.default.join(folder, file) }; }).filter(function (item) { var s = _fs.default.statSync(item.path); return s.isFile(); }); items.forEach(function (item) { var raw = _fs.default.readFileSync(item.path); var json = JSON.parse(raw); _this2.testsuites[item.name] = _core.TestSuite.fromJSON(json); }); } }], [{ key: "fromTree", value: function fromTree(tree) { var s = new FileClient(); Object.keys(tree).forEach(function (k) { var api = tree[k]; var handler = new _handler.default(k); Object.values(api).forEach(function (item) { var tc = _core.TestCase.fromJSON(item.json); // tc.id = tc.id || item.id handler.addTestCase(tc); }); s.addHandler(handler); }); return s; } }, { key: "fromPath", value: function fromPath(folder) { var result = _tree.default.walk("".concat(folder, "/testcase/")); var tree = result.tree; var client = FileClient.fromTree(tree); client.getTestSuites("".concat(folder, "/testsuite")); return client; } }]); return FileClient; }(); exports.default = FileClient;