summary refs log tree commit diff
path: root/api/tests/routes.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/tests/routes.test.ts')
-rw-r--r--api/tests/routes.test.ts155
1 files changed, 0 insertions, 155 deletions
diff --git a/api/tests/routes.test.ts b/api/tests/routes.test.ts
deleted file mode 100644
index 35d74a94..00000000
--- a/api/tests/routes.test.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-// TODO: check every route based on route() parameters: https://github.com/fosscord/fosscord-server/issues/308
-// TODO: check every route with different database engine
-
-import getRouteDescriptions from "../jest/getRouteDescriptions";
-import { join } from "path";
-import fs from "fs";
-import Ajv from "ajv";
-import addFormats from "ajv-formats";
-import fetch from "node-fetch";
-import { Event, User, events, Guild, Channel } from "@fosscord/util";
-
-const SchemaPath = join(__dirname, "..", "assets", "schemas.json");
-const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
-export const ajv = new Ajv({
-	allErrors: true,
-	parseDate: true,
-	allowDate: true,
-	schemas,
-	messages: true,
-	strict: true,
-	strictRequired: true,
-	coerceTypes: true
-});
-addFormats(ajv);
-
-var token: string;
-var user: User;
-var guild: Guild;
-var channel: Channel;
-
-const request = async (path: string, opts: any = {}): Promise<any> => {
-	const response = await fetch(`http://localhost:3001/api${path}`, {
-		...opts,
-		method: opts.method || opts.body ? "POST" : "GET",
-		body: opts.body && JSON.stringify(opts.body),
-		headers: {
-			authorization: token,
-			...(opts.body ? { "content-type": "application/json" } : {}),
-			...(opts.header || {})
-		}
-	});
-	if (response.status === 204) return;
-
-	var data = await response.text();
-	try {
-		data = JSON.parse(data);
-		if (response.status >= 400) throw data;
-		return data;
-	} catch (error) {
-		throw data;
-	}
-};
-
-beforeAll(async (done) => {
-	try {
-		const response = await request("/auth/register", {
-			body: {
-				fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
-				username: "tester",
-				invite: null,
-				consent: true,
-				date_of_birth: "2000-01-01",
-				gift_code_sku_id: null,
-				captcha_key: null
-			}
-		});
-		token = response.token;
-		user = await request(`/users/@me`);
-		const { id: guild_id } = await request("/guilds", { body: { name: "test server" } });
-		guild = await request(`/guilds/${guild_id}`);
-		channel = (await request(`/guilds/${guild_id}/channels`))[0];
-
-		done();
-	} catch (error) {
-		done(error);
-	}
-});
-
-const emit = events.emit;
-events.emit = (event: string | symbol, ...args: any[]) => {
-	events.emit("event", args[0]);
-	return emit(event, ...args);
-};
-
-describe("Automatic unit tests with route description middleware", () => {
-	const routes = getRouteDescriptions();
-
-	routes.forEach((route, pathAndMethod) => {
-		const [path, method] = pathAndMethod.split("|");
-
-		test(`${method.toUpperCase()} ${path}`, async (done) => {
-			if (!route.test) {
-				console.log(`${(route as any).file}\nrouter.${method} is missing the test property`);
-				return done();
-			}
-			const urlPath =
-				path.replace(":id", user.id).replace(":guild_id", guild.id).replace(":channel_id", channel.id) || route.test?.path;
-			var validate: any;
-			if (route.test.body) {
-				validate = ajv.getSchema(route.test.body);
-				if (!validate) return done(new Error(`Response schema ${route.test.body} not found`));
-			}
-
-			var body = "";
-			let eventEmitted = Promise.resolve();
-
-			if (route.test.event) {
-				if (!Array.isArray(route.test.event)) route.test.event = [route.test.event];
-
-				eventEmitted = new Promise((resolve, reject) => {
-					const timeout = setTimeout(() => reject, 1000);
-					const received = [];
-
-					events.on("event", (event: Event) => {
-						if (!route.test.event.includes(event.event)) return;
-
-						received.push(event.event);
-						if (received.length === route.test.event.length) resolve();
-					});
-				});
-			}
-
-			try {
-				const response = await fetch(`http://localhost:3001/api${urlPath}`, {
-					method: method.toUpperCase(),
-					body: JSON.stringify(route.test.body),
-					headers: { ...route.test.headers, authorization: token }
-				});
-
-				body = await response.text();
-
-				expect(response.status, body).toBe(route.test.response.status || 200);
-
-				// TODO: check headers
-				// TODO: expect event
-
-				if (validate) {
-					body = JSON.parse(body);
-					const valid = validate(body);
-					if (!valid) return done(validate.errors);
-				}
-			} catch (error) {
-				return done(error);
-			}
-
-			try {
-				await eventEmitted;
-			} catch (error) {
-				return done(new Error(`Event ${route.test.event} was not emitted`));
-			}
-
-			return done();
-		});
-	});
-});