summary refs log tree commit diff
path: root/api
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-18 11:56:06 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-18 11:56:06 +0200
commitaae7e8d7770f6d5f7d46c2263880c6c4e7ef6788 (patch)
treed1625d8ddd80fef1499d6beab4e26566cf8ee55d /api
parent:sparkles: jest automatic tests (diff)
downloadserver-aae7e8d7770f6d5f7d46c2263880c6c4e7ef6788.tar.xz
:sparkles: route middleware test option
Diffstat (limited to 'api')
-rw-r--r--api/jest/getRouteDescriptions.ts6
-rw-r--r--api/src/routes/users/#id/profile.ts2
-rw-r--r--api/src/util/route.ts6
-rw-r--r--api/tests/routes.test.ts11
4 files changed, 12 insertions, 13 deletions
diff --git a/api/jest/getRouteDescriptions.ts b/api/jest/getRouteDescriptions.ts
index d7d6e0c6..33922899 100644
--- a/api/jest/getRouteDescriptions.ts
+++ b/api/jest/getRouteDescriptions.ts
@@ -2,6 +2,7 @@ import { traverseDirectory } from "lambert-server";
 import path from "path";
 import express from "express";
 import * as RouteUtility from "../dist/util/route";
+import { RouteOptions } from "../dist/util/route";
 const Router = express.Router;
 
 const routes = new Map<string, RouteUtility.RouteOptions>();
@@ -12,9 +13,10 @@ 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");
+	const opts: RouteOptions = args.find((x) => typeof x === "object");
 	if (opts) {
-		routes.set(urlPath + "|" + method, opts);
+		routes.set(urlPath + "|" + method, opts); // @ts-ignore
+		opts.file = sourceFile;
 		// console.log(method, urlPath, opts);
 	} else {
 		console.log(`${sourceFile}\nrouter.${method}("${path}") is missing the "route()" description middleware\n`, args);
diff --git a/api/src/routes/users/#id/profile.ts b/api/src/routes/users/#id/profile.ts
index d60c4f86..d099bce7 100644
--- a/api/src/routes/users/#id/profile.ts
+++ b/api/src/routes/users/#id/profile.ts
@@ -11,7 +11,7 @@ export interface UserProfileResponse {
 	premium_since?: Date;
 }
 
-router.get("/", route({ response: { body: "UserProfileResponse" } }), async (req: Request, res: Response) => {
+router.get("/", route({ test: { response: { body: "UserProfileResponse" } } }), async (req: Request, res: Response) => {
 	if (req.params.id === "@me") req.params.id = req.user_id;
 	const user = await User.getPublicUser(req.params.id, { relations: ["connected_accounts"] });
 
diff --git a/api/src/util/route.ts b/api/src/util/route.ts
index 35ea43ba..9ef92c3a 100644
--- a/api/src/util/route.ts
+++ b/api/src/util/route.ts
@@ -33,11 +33,11 @@ export type RouteResponse = { status?: number; body?: `${string}Response`; heade
 export interface RouteOptions {
 	permission?: PermissionResolvable;
 	body?: `${string}Schema`; // typescript interface name
-	response?: RouteResponse;
-	example?: {
+	test?: {
+		response?: RouteResponse;
 		body?: any;
 		path?: string;
-		event?: EventData;
+		event?: EventData | EventData[];
 		headers?: Record<string, string>;
 	};
 }
diff --git a/api/tests/routes.test.ts b/api/tests/routes.test.ts
index e913e0dc..4cb7e6bc 100644
--- a/api/tests/routes.test.ts
+++ b/api/tests/routes.test.ts
@@ -3,13 +3,13 @@
 
 import getRouteDescriptions from "../jest/getRouteDescriptions";
 import supertest, { Response } from "supertest";
-import path from "path";
+import { join } from "path";
 import fs from "fs";
 import Ajv from "ajv";
 import addFormats from "ajv-formats";
 const request = supertest("http://localhost:3001/api");
 
-const SchemaPath = path.join(__dirname, "..", "assets", "responses.json");
+const SchemaPath = join(__dirname, "..", "assets", "responses.json");
 const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
 export const ajv = new Ajv({
 	allErrors: true,
@@ -27,13 +27,10 @@ describe("Automatic unit tests with route description middleware", () => {
 
 	routes.forEach((route, pathAndMethod) => {
 		const [path, method] = pathAndMethod.split("|");
+
 		test(path, (done) => {
 			if (!route.example) {
-				console.log(`Route ${path} is missing the example property`);
-				return done();
-			}
-			if (!route.response) {
-				console.log(`Route ${path} is missing the response property`);
+				console.log(`${(route as any).file}\nrouter.${method} is missing the test property`);
 				return done();
 			}
 			const urlPath = path || route.example?.path;