server/tests/api.test.ts

100 lines
3.5 KiB
TypeScript
Raw Normal View History

2023-09-22 00:42:59 +02:00
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
2024-04-07 06:16:54 +02:00
import { config } from "config-manager";
2024-04-14 02:46:33 +02:00
import { eq } from "drizzle-orm";
import { db } from "~drizzle/db";
2024-04-14 02:46:33 +02:00
import { emoji } from "~drizzle/schema";
import type { APIEmoji } from "~types/entities/emoji";
import type { APIInstance } from "~types/entities/instance";
2024-04-14 02:46:33 +02:00
import { getTestUsers, sendTestRequest, wrapRelativeUrl } from "./utils";
2023-09-22 00:42:59 +02:00
const base_url = config.http.base_url;
2023-09-22 00:42:59 +02:00
2024-04-14 02:46:33 +02:00
const { tokens, deleteUsers } = await getTestUsers(1);
2023-09-22 00:42:59 +02:00
2023-10-18 02:57:47 +02:00
describe("API Tests", () => {
2024-04-07 07:30:49 +02:00
afterAll(async () => {
2024-04-14 02:46:33 +02:00
await deleteUsers();
2024-04-07 07:30:49 +02:00
});
describe("GET /api/v1/instance", () => {
test("should return an APIInstance object", async () => {
const response = await sendTestRequest(
new Request(
wrapRelativeUrl(`${base_url}/api/v1/instance`, base_url),
{
method: "GET",
headers: {
"Content-Type": "application/json",
},
},
),
);
expect(response.status).toBe(200);
expect(response.headers.get("content-type")).toBe(
"application/json",
);
const instance = (await response.json()) as APIInstance;
expect(instance.uri).toBe(config.http.base_url);
2024-04-07 07:30:49 +02:00
expect(instance.title).toBeDefined();
expect(instance.description).toBeDefined();
expect(instance.email).toBeDefined();
expect(instance.version).toBeDefined();
expect(instance.urls).toBeDefined();
expect(instance.stats).toBeDefined();
expect(instance.thumbnail).toBeDefined();
expect(instance.languages).toBeDefined();
// Not implemented yet
// expect(instance.contact_account).toBeDefined();
expect(instance.rules).toBeDefined();
expect(instance.approval_required).toBeDefined();
expect(instance.max_toot_chars).toBeDefined();
});
});
describe("GET /api/v1/custom_emojis", () => {
beforeAll(async () => {
2024-04-14 02:46:33 +02:00
await db.insert(emoji).values({
shortcode: "test",
url: "https://example.com/test.png",
contentType: "image/png",
visibleInPicker: true,
2024-04-07 07:30:49 +02:00
});
});
test("should return an array of at least one custom emoji", async () => {
const response = await sendTestRequest(
new Request(
wrapRelativeUrl(
`${base_url}/api/v1/custom_emojis`,
base_url,
),
{
method: "GET",
headers: {
2024-04-14 02:46:33 +02:00
Authorization: `Bearer ${tokens[0].accessToken}`,
2024-04-07 07:30:49 +02:00
},
},
),
);
expect(response.status).toBe(200);
expect(response.headers.get("content-type")).toBe(
"application/json",
);
const emojis = (await response.json()) as APIEmoji[];
expect(emojis.length).toBeGreaterThan(0);
expect(emojis[0].shortcode).toBeString();
expect(emojis[0].url).toBeString();
});
afterAll(async () => {
2024-04-14 02:46:33 +02:00
await db.delete(emoji).where(eq(emoji.shortcode, "test"));
2024-04-07 07:30:49 +02:00
});
});
2023-09-22 00:42:59 +02:00
});