From a65249b79d3dd1257133c98ae89f469bbce36157 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sat, 13 Apr 2024 14:46:33 -1000 Subject: [PATCH] Remove Prisma once and for all --- build.ts | 11 +- bun.lockb | Bin 681424 -> 675364 bytes cli.ts | 22 +--- database/datasource.ts | 8 -- database/entities/relations.ts | 111 ------------------ index.ts | 3 - package.json | 9 +- server/api/oauth/callback/[issuer]/index.ts | 2 +- tests/api.test.ts | 86 ++------------ tests/api/accounts.test.ts | 123 +++++--------------- tests/api/statuses.test.ts | 102 ++++------------ tests/cli.skip-test.ts | 94 --------------- tests/oauth-scopes.test.ts | 2 +- tests/oauth.test.ts | 48 +++----- tests/utils.ts | 21 +++- types.d.ts | 28 ----- utils/oauth.ts | 2 +- utils/redis.ts | 3 +- 18 files changed, 112 insertions(+), 563 deletions(-) delete mode 100644 database/entities/relations.ts delete mode 100644 tests/cli.skip-test.ts diff --git a/build.ts b/build.ts index 8f4147cc..c7b9ec8d 100644 --- a/build.ts +++ b/build.ts @@ -13,7 +13,6 @@ await $`rm -rf dist && mkdir dist`; await Bun.build({ entrypoints: [ `${process.cwd()}/index.ts`, - `${process.cwd()}/prisma.ts`, `${process.cwd()}/cli.ts`, // Force Bun to include endpoints ...Object.values(rawRoutes), @@ -22,7 +21,7 @@ await Bun.build({ target: "bun", splitting: true, minify: true, - external: ["bullmq", "@prisma/client", "frontend"], + external: ["bullmq", "frontend"], }).then((output) => { if (!output.success) { console.log(output.logs); @@ -33,14 +32,6 @@ await Bun.build({ // I apologize for this await $`sed -i 's|import("node_modules/|import("./node_modules/|g' dist/*.js`; -// Copy generated Prisma client to dist -await $`mkdir -p dist/node_modules/@prisma`; -await $`cp -r ${process.cwd()}/node_modules/@prisma dist/node_modules/`; -await $`cp -r ${process.cwd()}/node_modules/.prisma dist/node_modules`; -await $`mkdir -p dist/node_modules/.bin`; -await $`cp -r ${process.cwd()}/node_modules/.bin/prisma dist/node_modules/.bin`; -await $`cp -r ${process.cwd()}/node_modules/prisma dist/node_modules/`; - // Copy Sharp to dist await $`mkdir -p dist/node_modules/@img`; await $`cp -r node_modules/@img/sharp-libvips-linux-* dist/node_modules/@img`; diff --git a/bun.lockb b/bun.lockb index 8c51491143eef19dee329651a83a9738d1412abe..b774b7cb296d4095e2d4ad1a1c9d79a34dac2651 100755 GIT binary patch delta 135645 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 delta 141356 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 diff --git a/cli.ts b/cli.ts index 878eefd1..abe3b56b 100644 --- a/cli.ts +++ b/cli.ts @@ -3,26 +3,25 @@ import { tmpdir } from "node:os"; import { join } from "node:path"; import { Parser } from "@json2csv/plainjs"; import { MeiliIndexType, rebuildSearchIndexes } from "@meilisearch"; -import type { Prisma } from "@prisma/client"; import chalk from "chalk"; import { CliBuilder, CliCommand } from "cli-parser"; import Table from "cli-table"; +import { type SQL, eq, inArray, isNotNull, isNull, like } from "drizzle-orm"; import extract from "extract-zip"; import { MediaBackend } from "media-manager"; import { lookup } from "mime-types"; import { getUrl } from "~database/entities/Attachment"; +import { findFirstStatuses, findManyStatuses } from "~database/entities/Status"; import { + type User, createNewLocalUser, findFirstUser, findManyUsers, - type User, } from "~database/entities/User"; -import { CliParameterType } from "~packages/cli-parser/cli-builder.type"; -import { config } from "~packages/config-manager"; import { db } from "~drizzle/db"; import { emoji, openIdAccount, status, user } from "~drizzle/schema"; -import { type SQL, eq, inArray, isNotNull, isNull, like } from "drizzle-orm"; -import { findFirstStatuses, findManyStatuses } from "~database/entities/Status"; +import { CliParameterType } from "~packages/cli-parser/cli-builder.type"; +import { config } from "~packages/config-manager"; const args = process.argv; @@ -949,17 +948,6 @@ const cliBuilder = new CliBuilder([ return 1; } - const queries: Prisma.StatusWhereInput[] = []; - - for (const field of fields) { - queries.push({ - [field]: { - contains: query, - mode: caseSensitive ? "default" : "insensitive", - }, - }); - } - let instanceQuery: SQL | undefined = isNull( status.instanceId, ); diff --git a/database/datasource.ts b/database/datasource.ts index d91ca8a0..f6d5f8b3 100644 --- a/database/datasource.ts +++ b/database/datasource.ts @@ -1,10 +1,4 @@ // import { Queue } from "bullmq"; -import { PrismaClient } from "@prisma/client"; -import { config } from "config-manager"; - -const client = new PrismaClient({ - datasourceUrl: `postgresql://${config.database.username}:${config.database.password}@${config.database.host}:${config.database.port}/${config.database.database}`, -}); /* const federationQueue = new Queue("federation", { connection: { @@ -14,5 +8,3 @@ const client = new PrismaClient({ db: config.redis.queue.database || undefined, }, }); */ - -export { client /* federationQueue */ }; diff --git a/database/entities/relations.ts b/database/entities/relations.ts deleted file mode 100644 index 284e1d6f..00000000 --- a/database/entities/relations.ts +++ /dev/null @@ -1,111 +0,0 @@ -import type { Prisma } from "@prisma/client"; - -export const userRelations: Prisma.UserInclude = { - emojis: true, - instance: true, - likes: true, - relationships: true, - relationshipSubjects: true, - pinnedNotes: true, - _count: { - select: { - statuses: true, - likes: true, - }, - }, -}; - -export const statusAndUserRelations: Prisma.StatusInclude = { - author: { - include: userRelations, - }, - application: true, - emojis: true, - inReplyToPost: { - include: { - author: { - include: userRelations, - }, - application: true, - emojis: true, - inReplyToPost: { - include: { - author: true, - }, - }, - instance: true, - mentions: true, - pinnedBy: true, - _count: { - select: { - replies: true, - }, - }, - }, - }, - reblogs: true, - attachments: true, - instance: true, - mentions: { - include: userRelations, - }, - pinnedBy: true, - _count: { - select: { - replies: true, - likes: true, - reblogs: true, - }, - }, - reblog: { - include: { - author: { - include: userRelations, - }, - application: true, - emojis: true, - inReplyToPost: { - include: { - author: true, - }, - }, - instance: true, - mentions: { - include: userRelations, - }, - pinnedBy: true, - _count: { - select: { - replies: true, - }, - }, - }, - }, - quotingPost: { - include: { - author: { - include: userRelations, - }, - application: true, - emojis: true, - inReplyToPost: { - include: { - author: true, - }, - }, - instance: true, - mentions: true, - pinnedBy: true, - _count: { - select: { - replies: true, - }, - }, - }, - }, - likes: { - include: { - liker: true, - }, - }, -}; diff --git a/index.ts b/index.ts index 808e4471..de9af4a6 100644 --- a/index.ts +++ b/index.ts @@ -2,7 +2,6 @@ import { exists, mkdir, writeFile } from "node:fs/promises"; import { dirname } from "node:path"; import { connectMeili } from "@meilisearch"; import { moduleIsEntry } from "@module"; -import { initializeRedisCache } from "@redis"; import { config } from "config-manager"; import { count, sql } from "drizzle-orm"; import { LogLevel, LogManager, MultiLogManager } from "log-manager"; @@ -39,8 +38,6 @@ await dualLogger.log(LogLevel.INFO, "Lysand", "Starting Lysand..."); const isProd = process.env.NODE_ENV === "production" || process.argv.includes("--prod"); -const redisCache = await initializeRedisCache(); - if (config.meilisearch.enabled) { await connectMeili(dualLogger); } diff --git a/package.json b/package.json index 1eb534eb..c916ad32 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "prisma": "DATABASE_URL=$(bun run prisma.ts) bunx prisma", "generate": "bun prisma generate", "benchmark:timeline": "bun run benchmarks/timelines.ts", - "cloc": "cloc . --exclude-dir node_modules,dist", + "cloc": "cloc . --exclude-dir node_modules,dist,.output,.nuxt,meta,logs --exclude-ext sql,log", "cli": "bun run cli.ts" }, "trustedDependencies": [ @@ -51,14 +51,11 @@ "@fortawesome/fontawesome-common-types", "@fortawesome/free-regular-svg-icons", "@fortawesome/free-solid-svg-icons", - "@prisma/client", - "@prisma/engines", "es5-ext", "esbuild", "json-editor-vue", "msgpackr-extract", "nuxt-app", - "prisma", "sharp", "vue-demi" ], @@ -99,7 +96,6 @@ "@aws-sdk/client-s3": "^3.461.0", "@iarna/toml": "^2.2.5", "@json2csv/plainjs": "^7.0.6", - "@prisma/client": "^5.6.0", "blurhash": "^2.0.5", "bullmq": "latest", "chalk": "^5.3.0", @@ -128,9 +124,6 @@ "next-route-matcher": "^1.0.1", "oauth4webapi": "^2.4.0", "pg": "^8.11.5", - "prisma": "^5.6.0", - "prisma-json-types-generator": "^3.0.4", - "prisma-redis-middleware": "^4.8.0", "request-parser": "workspace:*", "semver": "^7.5.4", "sharp": "^0.33.3", diff --git a/server/api/oauth/callback/[issuer]/index.ts b/server/api/oauth/callback/[issuer]/index.ts index 26eccf5f..4eae884b 100644 --- a/server/api/oauth/callback/[issuer]/index.ts +++ b/server/api/oauth/callback/[issuer]/index.ts @@ -14,9 +14,9 @@ import { validateAuthResponse, } from "oauth4webapi"; import { TokenType } from "~database/entities/Token"; +import { findFirstUser } from "~database/entities/User"; import { db } from "~drizzle/db"; import { token } from "~drizzle/schema"; -import { findFirstUser } from "~database/entities/User"; export const meta = applyConfig({ allowedMethods: ["GET"], diff --git a/tests/api.test.ts b/tests/api.test.ts index 5ce79c77..e722d4bd 100644 --- a/tests/api.test.ts +++ b/tests/api.test.ts @@ -1,74 +1,19 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import type { Token } from "@prisma/client"; import { config } from "config-manager"; -import { inArray } from "drizzle-orm"; -import { client } from "~database/datasource"; -import { TokenType } from "~database/entities/Token"; -import { - type UserWithRelations, - createNewLocalUser, -} from "~database/entities/User"; +import { eq } from "drizzle-orm"; import { db } from "~drizzle/db"; -import { application, user } from "~drizzle/schema"; +import { emoji } from "~drizzle/schema"; import type { APIEmoji } from "~types/entities/emoji"; import type { APIInstance } from "~types/entities/instance"; -import { sendTestRequest, wrapRelativeUrl } from "./utils"; +import { getTestUsers, sendTestRequest, wrapRelativeUrl } from "./utils"; const base_url = config.http.base_url; -let token: Token; -let dummyUser: UserWithRelations; +const { tokens, deleteUsers } = await getTestUsers(1); describe("API Tests", () => { - beforeAll(async () => { - await db.delete(user).where(inArray(user.username, ["test", "test2"])); - await db - .delete(application) - .where(inArray(application.clientId, ["test"])); - - // Initialize test user - dummyUser = await createNewLocalUser({ - email: "test@test.com", - username: "test", - password: "test", - display_name: "", - }); - - if (!dummyUser) { - throw new Error("Failed to create test user"); - } - - token = await client.token.create({ - data: { - access_token: "test", - application: { - create: { - client_id: "test", - name: "Test Application", - redirect_uris: "https://example.com", - scopes: "read write", - secret: "test", - website: "https://example.com", - vapid_key: null, - }, - }, - code: "test", - scope: "read write", - token_type: TokenType.BEARER, - user: { - connect: { - id: dummyUser.id, - }, - }, - }, - }); - }); - afterAll(async () => { - await db.delete(user).where(inArray(user.username, ["test", "test2"])); - await db - .delete(application) - .where(inArray(application.clientId, ["test"])); + await deleteUsers(); }); describe("GET /api/v1/instance", () => { @@ -111,14 +56,11 @@ describe("API Tests", () => { describe("GET /api/v1/custom_emojis", () => { beforeAll(async () => { - await client.emoji.create({ - data: { - instanceId: null, - url: "https://example.com/test.png", - content_type: "image/png", - shortcode: "test", - visible_in_picker: true, - }, + await db.insert(emoji).values({ + shortcode: "test", + url: "https://example.com/test.png", + contentType: "image/png", + visibleInPicker: true, }); }); @@ -132,7 +74,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${tokens[0].accessToken}`, }, }, ), @@ -151,11 +93,7 @@ describe("API Tests", () => { }); afterAll(async () => { - await client.emoji.deleteMany({ - where: { - shortcode: "test", - }, - }); + await db.delete(emoji).where(eq(emoji.shortcode, "test")); }); }); }); diff --git a/tests/api/accounts.test.ts b/tests/api/accounts.test.ts index 0b9adb9a..0f7b8efb 100644 --- a/tests/api/accounts.test.ts +++ b/tests/api/accounts.test.ts @@ -1,86 +1,19 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import type { Token } from "@prisma/client"; import { config } from "config-manager"; -import { client } from "~database/datasource"; -import { TokenType } from "~database/entities/Token"; -import { - type UserWithRelations, - createNewLocalUser, -} from "~database/entities/User"; -import { sendTestRequest, wrapRelativeUrl } from "~tests/utils"; +import { getTestUsers, sendTestRequest, wrapRelativeUrl } from "~tests/utils"; import type { APIAccount } from "~types/entities/account"; import type { APIRelationship } from "~types/entities/relationship"; import type { APIStatus } from "~types/entities/status"; const base_url = config.http.base_url; -let token: Token; -let user: UserWithRelations; -let user2: UserWithRelations; - -beforeAll(async () => { - await client.user.deleteMany({ - where: { - username: { - in: ["test", "test2"], - }, - }, - }); - - user = await createNewLocalUser({ - email: "test@test.com", - username: "test", - password: "test", - display_name: "", - }); - - user2 = await createNewLocalUser({ - email: "test2@test.com", - username: "test2", - password: "test2", - display_name: "", - }); - - token = await client.token.create({ - data: { - access_token: "test", - application: { - create: { - client_id: "test", - name: "Test Application", - redirect_uris: "https://example.com", - scopes: "read write", - secret: "test", - website: "https://example.com", - vapid_key: null, - }, - }, - code: "test", - scope: "read write", - token_type: TokenType.BEARER, - user: { - connect: { - id: user.id, - }, - }, - }, - }); -}); +const { users, tokens, deleteUsers } = await getTestUsers(2); +const user = users[0]; +const user2 = users[1]; +const token = tokens[0]; afterAll(async () => { - await client.user.deleteMany({ - where: { - username: { - in: ["test", "test2"], - }, - }, - }); - - await client.application.deleteMany({ - where: { - client_id: "test", - }, - }); + await deleteUsers(); }); describe("API Tests", () => { @@ -92,7 +25,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -117,7 +50,7 @@ describe("API Tests", () => { { method: "PATCH", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ @@ -149,7 +82,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -199,7 +132,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -228,7 +161,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -259,7 +192,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -290,7 +223,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -321,7 +254,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -347,7 +280,7 @@ describe("API Tests", () => { new Request(wrapRelativeUrl("/api/v1/blocks", base_url), { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, }), ); @@ -375,7 +308,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -406,7 +339,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ notifications: true }), @@ -436,7 +369,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ notifications: false }), @@ -463,7 +396,7 @@ describe("API Tests", () => { new Request(wrapRelativeUrl("/api/v1/mutes", base_url), { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, }), ); @@ -492,7 +425,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -523,7 +456,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -554,7 +487,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -585,7 +518,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ comment: "This is a new note" }), @@ -616,7 +549,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, }, ), @@ -651,7 +584,7 @@ describe("API Tests", () => { { method: "DELETE", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -678,7 +611,7 @@ describe("API Tests", () => { { method: "DELETE", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -708,7 +641,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({}), @@ -732,7 +665,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, }, ), diff --git a/tests/api/statuses.test.ts b/tests/api/statuses.test.ts index 3599a313..f90cb4aa 100644 --- a/tests/api/statuses.test.ts +++ b/tests/api/statuses.test.ts @@ -1,13 +1,12 @@ -import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import type { Token } from "@prisma/client"; +import { afterAll, describe, expect, test } from "bun:test"; import { config } from "config-manager"; -import { client } from "~database/datasource"; -import { TokenType } from "~database/entities/Token"; +import { statusToAPI } from "~database/entities/Status"; import { - type UserWithRelations, - createNewLocalUser, -} from "~database/entities/User"; -import { sendTestRequest, wrapRelativeUrl } from "~tests/utils"; + getTestStatuses, + getTestUsers, + sendTestRequest, + wrapRelativeUrl, +} from "~tests/utils"; import type { APIAccount } from "~types/entities/account"; import type { APIAsyncAttachment } from "~types/entities/async_attachment"; import type { APIContext } from "~types/entities/context"; @@ -15,69 +14,16 @@ import type { APIStatus } from "~types/entities/status"; const base_url = config.http.base_url; -let token: Token; -let user: UserWithRelations; +const { users, tokens, deleteUsers } = await getTestUsers(1); +const user = users[0]; +const token = tokens[0]; let status: APIStatus | null = null; let status2: APIStatus | null = null; let media1: APIAsyncAttachment | null = null; describe("API Tests", () => { - beforeAll(async () => { - await client.user.deleteMany({ - where: { - username: { - in: ["test", "test2"], - }, - }, - }); - - user = await createNewLocalUser({ - email: "test@test.com", - username: "test", - password: "test", - display_name: "", - }); - - token = await client.token.create({ - data: { - access_token: "test", - application: { - create: { - client_id: "test", - name: "Test Application", - redirect_uris: "https://example.com", - scopes: "read write", - secret: "test", - website: "https://example.com", - vapid_key: null, - }, - }, - code: "test", - scope: "read write", - token_type: TokenType.BEARER, - user: { - connect: { - id: user.id, - }, - }, - }, - }); - }); - afterAll(async () => { - await client.user.deleteMany({ - where: { - username: { - in: ["test", "test2"], - }, - }, - }); - - await client.application.deleteMany({ - where: { - client_id: "test", - }, - }); + await deleteUsers(); }); describe("POST /api/v2/media", () => { @@ -91,7 +37,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, body: formData, }, @@ -119,7 +65,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ @@ -167,7 +113,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, body: JSON.stringify({ @@ -220,7 +166,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -271,7 +217,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -302,7 +248,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -332,7 +278,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -365,7 +311,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -394,7 +340,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -430,7 +376,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -452,7 +398,7 @@ describe("API Tests", () => { { method: "GET", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -483,7 +429,7 @@ describe("API Tests", () => { { method: "POST", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, "Content-Type": "application/json", }, }, @@ -513,7 +459,7 @@ describe("API Tests", () => { { method: "DELETE", headers: { - Authorization: `Bearer ${token.access_token}`, + Authorization: `Bearer ${token.accessToken}`, }, }, ), diff --git a/tests/cli.skip-test.ts b/tests/cli.skip-test.ts deleted file mode 100644 index 7d8e3968..00000000 --- a/tests/cli.skip-test.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { afterAll, beforeAll, describe, expect, it } from "bun:test"; -import { client } from "~database/datasource"; -import { createNewLocalUser } from "~database/entities/User"; - -describe("cli.ts", () => { - describe("User creation", () => { - it("should execute user create command without admin flag", async () => { - afterAll(async () => { - await client.user.deleteMany({ - where: { - username: "testuser297", - email: "testuser297@gmail.com", - }, - }); - }); - - // Run command and wait for it to finish - Bun.spawnSync([ - "bun", - "run", - "cli.ts", - "user", - "create", - "testuser297", - "password123", - "testuser297@gmail.com", - ]); - - const createdUser = await client.user.findFirst({ - where: { - username: "testuser297", - email: "testuser297@gmail.com", - }, - }); - - expect(createdUser).toBeDefined(); - }); - - it("should execute user create command with admin flag", async () => { - afterAll(async () => { - await client.user.deleteMany({ - where: { - username: "testuser297", - email: "testuser297@gmail.com", - }, - }); - }); - - // Run command and wait for it to finish - Bun.spawnSync([ - "bun", - "run", - "cli.ts", - "user", - "create", - "testuser297", - "password123", - "testuser297@gmail.com", - "--admin", - ]); - - const createdUser = await client.user.findFirst({ - where: { - username: "testuser297", - email: "testuser297@gmail.com", - isAdmin: true, - }, - }); - - expect(createdUser).toBeDefined(); - }); - }); - - it("should execute user delete command", async () => { - beforeAll(async () => { - await createNewLocalUser({ - username: "bob124", - password: "jesus", - email: "bob124@bob124.com", - }); - }); - - Bun.spawnSync(["bun", "run", "cli", "user", "delete", "bob124"]); - - const userExists = await client.user.findFirst({ - where: { - username: "bob124", - email: "bob124@bob124.com", - }, - }); - - expect(!!userExists).toBe(false); - }); -}); diff --git a/tests/oauth-scopes.test.ts b/tests/oauth-scopes.test.ts index 51a60358..768e9f87 100644 --- a/tests/oauth-scopes.test.ts +++ b/tests/oauth-scopes.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "bun:test"; import { checkIfOauthIsValid } from "@oauth"; -import type { Application } from "@prisma/client"; +import type { Application } from "~database/entities/Application"; describe("checkIfOauthIsValid", () => { it("should return true when routeScopes and application.scopes are empty", () => { diff --git a/tests/oauth.test.ts b/tests/oauth.test.ts index aaf1da00..0bad31a1 100644 --- a/tests/oauth.test.ts +++ b/tests/oauth.test.ts @@ -1,26 +1,25 @@ -import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import type { Application, Token } from "@prisma/client"; -import { client } from "~database/datasource"; -import { createNewLocalUser } from "~database/entities/User"; -import { sendTestRequest, wrapRelativeUrl } from "./utils"; +import { afterAll, describe, expect, test } from "bun:test"; +import type { APIApplication } from "~types/entities/application"; +import { + deleteOldTestUsers, + getTestUsers, + sendTestRequest, + wrapRelativeUrl, +} from "./utils"; +import type { APIToken } from "~types/entities/token"; const base_url = "http://lysand.localhost:8080"; //config.http.base_url; let client_id: string; let client_secret: string; let code: string; -let token: Token; +let token: APIToken; +const { users, passwords, deleteUsers } = await getTestUsers(1); -beforeAll(async () => { - // Init test user - await createNewLocalUser({ - email: "test@test.com", - username: "test", - password: "test", - display_name: "", - }); +afterAll(async () => { + await deleteUsers(); + await deleteOldTestUsers(); }); - describe("POST /api/v1/apps/", () => { test("should create an application", async () => { const formData = new FormData(); @@ -61,8 +60,10 @@ describe("POST /api/auth/login/", () => { test("should get a code", async () => { const formData = new FormData(); - formData.append("email", "test@test.com"); - formData.append("password", "test"); + console.log(users[0]?.email ?? ""); + + formData.append("email", users[0]?.email ?? ""); + formData.append("password", passwords[0]); const response = await sendTestRequest( new Request( @@ -139,20 +140,9 @@ describe("GET /api/v1/apps/verify_credentials", () => { expect(response.status).toBe(200); expect(response.headers.get("content-type")).toBe("application/json"); - const credentials = (await response.json()) as Partial; + const credentials = (await response.json()) as Partial; expect(credentials.name).toBe("Test Application"); expect(credentials.website).toBe("https://example.com"); - expect(credentials.redirect_uris).toBe("https://example.com"); - expect(credentials.scopes).toBe("read write"); - }); -}); - -afterAll(async () => { - // Clean up user - await client.user.delete({ - where: { - username: "test", - }, }); }); diff --git a/tests/utils.ts b/tests/utils.ts index ae1d9cee..42571a73 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,6 +1,6 @@ import { randomBytes } from "node:crypto"; import { inArray, like } from "drizzle-orm"; -import type { Status } from "~database/entities/Status"; +import { type Status, findManyStatuses } from "~database/entities/Status"; import { type User, type UserWithRelations, @@ -31,19 +31,22 @@ export const deleteOldTestUsers = async () => { export const getTestUsers = async (count: number) => { const users: UserWithRelations[] = []; + const passwords: string[] = []; for (let i = 0; i < count; i++) { + const password = randomBytes(32).toString("hex"); + const user = await createNewLocalUser({ username: `test-${randomBytes(32).toString("hex")}`, email: `${randomBytes(32).toString("hex")}@test.com`, - password: randomBytes(32).toString("hex"), - skipPasswordHash: true, + password, }); if (!user) { throw new Error("Failed to create test user"); } + passwords.push(password); users.push(user); } @@ -64,6 +67,7 @@ export const getTestUsers = async (count: number) => { return { users, tokens, + passwords, deleteUsers: async () => { await db.delete(user).where( inArray( @@ -104,5 +108,14 @@ export const getTestStatuses = async ( statuses.push(newStatus); } - return statuses.toSorted((a, b) => a.id.localeCompare(b.id)); + const statusesWithRelations = await findManyStatuses({ + where: (status, { inArray }) => + inArray( + status.id, + statuses.map((s) => s.id), + ), + orderBy: (status, { asc }) => asc(status.id), + }); + + return statusesWithRelations; }; diff --git a/types.d.ts b/types.d.ts index eff56313..e69de29b 100644 --- a/types.d.ts +++ b/types.d.ts @@ -1,28 +0,0 @@ -import type { LysandObject } from "@prisma/client"; -import type { APIAccount } from "~types/entities/account"; -import type { APIField } from "~types/entities/field"; -import type { ContentFormat } from "~types/lysand/Object"; - -declare namespace global { - namespace PrismaJson { - type InstanceLogo = ContentFormat[]; - type ObjectData = LysandObject; - type ObjectExtensions = LysandObject["extensions"]; - interface UserEndpoints { - inbox: string; - liked: string; - outbox: string; - disliked: string; - featured: string; - followers: string; - following: string; - } - interface UserSource { - note: string; - fields: APIField[]; - privacy: APIAccount["privacy"]; - language: string; - sensitive: boolean; - } - } -} diff --git a/utils/oauth.ts b/utils/oauth.ts index e5dca756..a7dcc0c2 100644 --- a/utils/oauth.ts +++ b/utils/oauth.ts @@ -1,4 +1,4 @@ -import type { Application } from "@prisma/client"; +import type { Application } from "~database/entities/Application"; /** * Check if an OAuth application is valid for a route diff --git a/utils/redis.ts b/utils/redis.ts index 118102c2..4916d360 100644 --- a/utils/redis.ts +++ b/utils/redis.ts @@ -1,4 +1,4 @@ -import type { Prisma } from "@prisma/client"; +/* import type { Prisma } from "@prisma/client"; import chalk from "chalk"; import { config } from "config-manager"; import Redis from "ioredis"; @@ -56,3 +56,4 @@ export const initializeRedisCache = async () => { return null; }; + */