summary refs log tree commit diff
path: root/api/jest/getRouteDescriptions.ts
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-18 01:50:29 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-18 01:50:29 +0200
commitd61013cebf9eb8a73318ea0bfcae6f643cd90a7b (patch)
tree4affc73533786a9439fe6c1fdae462dae3101414 /api/jest/getRouteDescriptions.ts
parent:art: use typescript plugin that converts to relative paths (diff)
downloadserver-d61013cebf9eb8a73318ea0bfcae6f643cd90a7b.tar.xz
:sparkles: jest automatic tests
Diffstat (limited to 'api/jest/getRouteDescriptions.ts')
-rw-r--r--api/jest/getRouteDescriptions.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/api/jest/getRouteDescriptions.ts b/api/jest/getRouteDescriptions.ts
new file mode 100644

index 00000000..d7d6e0c6 --- /dev/null +++ b/api/jest/getRouteDescriptions.ts
@@ -0,0 +1,56 @@ +import { traverseDirectory } from "lambert-server"; +import path from "path"; +import express from "express"; +import * as RouteUtility from "../dist/util/route"; +const Router = express.Router; + +const routes = new Map<string, RouteUtility.RouteOptions>(); +let currentPath = ""; +let currentFile = ""; +const methods = ["get", "post", "put", "delete", "patch"]; + +function registerPath(file, method, prefix, path, ...args) { + const urlPath = prefix + path; + const sourceFile = file.replace("/dist/", "/src/").replace(".js", ".ts"); + const opts = args.find((x) => typeof x === "object"); + if (opts) { + routes.set(urlPath + "|" + method, opts); + // console.log(method, urlPath, opts); + } else { + console.log(`${sourceFile}\nrouter.${method}("${path}") is missing the "route()" description middleware\n`, args); + } +} + +function routeOptions(opts) { + return opts; +} + +// @ts-ignore +RouteUtility.route = routeOptions; + +express.Router = (opts) => { + const path = currentPath; + const file = currentFile; + const router = Router(opts); + + for (const method of methods) { + router[method] = registerPath.bind(null, file, method, path); + } + + return router; +}; + +export default function getRouteDescriptions() { + const root = path.join(__dirname, "..", "dist", "routes", "/"); + traverseDirectory({ dirname: root, recursive: true }, (file) => { + currentFile = file; + let path = file.replace(root.slice(0, -1), ""); + path = path.split(".").slice(0, -1).join("."); // trancate .js/.ts file extension of path + path = path.replaceAll("#", ":").replaceAll("\\", "/"); // replace # with : for path parameters and windows paths with slashes + if (path.endsWith("/index")) path = path.slice(0, "/index".length * -1); // delete index from path + currentPath = path; + + require(file); + }); + return routes; +}