From fde70fa61a0beb78fb1846b2af6bcc07ad79ba3b Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sun, 15 Jun 2025 22:17:33 +0200 Subject: [PATCH] refactor: :truck: Move testing to its own sub-package --- benchmarks/timeline.ts | 6 +- bun.lock | 14 ++++ bunfig.toml | 2 +- classes/media/preprocessors/blurhash.test.ts | 2 +- package.json | 5 +- packages/api/build.ts | 2 +- packages/api/package.json | 1 + .../api/routes/api/auth/login/index.test.ts | 2 +- .../api/routes/api/auth/reset/index.test.ts | 2 +- .../routes/api/v1/accounts/[id]/block.test.ts | 2 +- .../api/v1/accounts/[id]/follow.test.ts | 2 +- .../api/v1/accounts/[id]/followers.test.ts | 2 +- .../api/v1/accounts/[id]/following.test.ts | 2 +- .../routes/api/v1/accounts/[id]/index.test.ts | 6 +- .../routes/api/v1/accounts/[id]/mute.test.ts | 2 +- .../routes/api/v1/accounts/[id]/note.test.ts | 2 +- .../routes/api/v1/accounts/[id]/pin.test.ts | 2 +- .../[id]/remove_from_followers.test.ts | 2 +- .../[id]/roles/[role_id]/index.test.ts | 2 +- .../api/v1/accounts/[id]/roles/index.test.ts | 2 +- .../api/v1/accounts/[id]/statuses.test.ts | 2 +- .../api/v1/accounts/[id]/unblock.test.ts | 2 +- .../api/v1/accounts/[id]/unfollow.test.ts | 2 +- .../api/v1/accounts/[id]/unmute.test.ts | 2 +- .../routes/api/v1/accounts/[id]/unpin.test.ts | 2 +- .../accounts/familiar_followers/index.test.ts | 2 +- .../routes/api/v1/accounts/index.get.test.ts | 2 +- .../routes/api/v1/accounts/index.post.test.ts | 2 +- .../api/v1/accounts/lookup/index.test.ts | 2 +- .../v1/accounts/relationships/index.test.ts | 2 +- .../api/v1/accounts/search/index.test.ts | 2 +- .../accounts/update_credentials/index.test.ts | 2 +- .../accounts/verify_credentials/index.test.ts | 2 +- .../api/routes/api/v1/blocks/index.test.ts | 2 +- .../routes/api/v1/challenges/index.test.ts | 2 +- .../routes/api/v1/custom_emojis/index.test.ts | 2 +- .../routes/api/v1/emojis/[id]/index.test.ts | 2 +- .../api/routes/api/v1/emojis/index.test.ts | 2 +- .../v1/instance/extended_description.test.ts | 2 +- .../api/v1/instance/privacy_policy.test.ts | 2 +- .../api/routes/api/v1/instance/rules.test.ts | 2 +- .../api/v1/instance/terms_of_service.test.ts | 2 +- .../api/routes/api/v1/markers/index.test.ts | 6 +- .../api/routes/api/v1/mutes/index.test.ts | 2 +- .../api/v1/notifications/[id]/dismiss.test.ts | 2 +- .../api/v1/notifications/[id]/index.test.ts | 2 +- .../api/v1/notifications/clear/index.test.ts | 2 +- .../destroy_multiple/index.test.ts | 6 +- .../routes/api/v1/notifications/index.test.ts | 6 +- .../api/routes/api/v1/profile/avatar.test.ts | 2 +- .../api/routes/api/v1/profile/header.test.ts | 2 +- .../api/v1/push/subscription/index.test.ts | 2 +- .../routes/api/v1/roles/[id]/index.test.ts | 2 +- .../api/routes/api/v1/roles/index.test.ts | 2 +- .../api/v1/statuses/[id]/context.test.ts | 6 +- .../api/v1/statuses/[id]/favourite.test.ts | 6 +- .../v1/statuses/[id]/favourited_by.test.ts | 6 +- .../routes/api/v1/statuses/[id]/index.test.ts | 6 +- .../v1/statuses/[id]/reactions/[name].test.ts | 6 +- .../v1/statuses/[id]/reactions/index.test.ts | 6 +- .../api/v1/statuses/[id]/reblog.test.ts | 6 +- .../api/v1/statuses/[id]/reblogged_by.test.ts | 6 +- .../api/v1/statuses/[id]/unfavourite.test.ts | 6 +- .../api/v1/statuses/[id]/unreblog.test.ts | 6 +- .../api/routes/api/v1/statuses/index.test.ts | 2 +- .../api/routes/api/v1/timelines/home.test.ts | 6 +- .../routes/api/v1/timelines/public.test.ts | 6 +- .../routes/api/v2/filters/[id]/index.test.ts | 2 +- .../api/routes/api/v2/filters/index.test.ts | 2 +- .../api/routes/api/v2/instance/index.test.ts | 2 +- packages/api/routes/inbox/index.test.ts | 6 +- {tests => packages/api/routes}/oauth.test.ts | 70 ++++++------------ tests/utils.ts => packages/tests/index.ts | 0 packages/tests/package.json | 20 +++++ {tests => packages/tests}/setup.ts | 2 +- plugins/openid/routes/authorize.test.ts | 2 +- plugins/openid/routes/jwks.test.ts | 2 +- plugins/openid/routes/oauth/revoke.test.ts | 2 +- plugins/openid/routes/oauth/token.test.ts | 2 +- plugins/openid/routes/sso/:id/index.test.ts | 2 +- plugins/openid/routes/sso/index.test.ts | 2 +- tests/test-image.webp | Bin 76372 -> 0 bytes 82 files changed, 207 insertions(+), 125 deletions(-) rename {tests => packages/api/routes}/oauth.test.ts (68%) rename tests/utils.ts => packages/tests/index.ts (100%) create mode 100644 packages/tests/package.json rename {tests => packages/tests}/setup.ts (76%) delete mode 100755 tests/test-image.webp diff --git a/benchmarks/timeline.ts b/benchmarks/timeline.ts index 45dcc8c4..a0b30083 100644 --- a/benchmarks/timeline.ts +++ b/benchmarks/timeline.ts @@ -1,8 +1,12 @@ import type { Status } from "@versia/client/schemas"; +import { + fakeRequest, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; import { bench, run } from "mitata"; import type { z } from "zod"; import { configureLoggers } from "@/loggers"; -import { fakeRequest, getTestStatuses, getTestUsers } from "~/tests/utils"; await configureLoggers(true); diff --git a/bun.lock b/bun.lock index 1c27e921..eafb6f8b 100644 --- a/bun.lock +++ b/bun.lock @@ -19,6 +19,7 @@ "@scalar/hono-api-reference": "catalog:", "@sentry/bun": "catalog:", "@versia-server/config": "workspace:*", + "@versia-server/tests": "workspace:*", "@versia/client": "workspace:*", "@versia/kit": "workspace:*", "@versia/sdk": "workspace:*", @@ -168,6 +169,17 @@ "zod": "catalog:", }, }, + "packages/tests": { + "name": "@versia-server/tests", + "version": "0.0.1", + "dependencies": { + "@versia-server/config": "workspace:*", + "@versia/client": "workspace:*", + "@versia/kit": "workspace:*", + "altcha-lib": "catalog:", + "drizzle-orm": "catalog:", + }, + }, "packages/worker": { "name": "@versia-server/worker", "version": "0.9.0-alpha.0", @@ -693,6 +705,8 @@ "@versia-server/config": ["@versia-server/config@workspace:packages/config"], + "@versia-server/tests": ["@versia-server/tests@workspace:packages/tests"], + "@versia-server/worker": ["@versia-server/worker@workspace:packages/worker"], "@versia/client": ["@versia/client@workspace:packages/client"], diff --git a/bunfig.toml b/bunfig.toml index 43df4271..aa1fb8b4 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -2,4 +2,4 @@ "@jsr" = "https://npm.jsr.io" [test] -preload = ["./tests/setup.ts"] +preload = ["./packages/tests/setup.ts"] diff --git a/classes/media/preprocessors/blurhash.test.ts b/classes/media/preprocessors/blurhash.test.ts index 9c959e77..6800df2b 100644 --- a/classes/media/preprocessors/blurhash.test.ts +++ b/classes/media/preprocessors/blurhash.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "bun:test"; +import { mockModule } from "@versia-server/tests"; import sharp from "sharp"; -import { mockModule } from "~/tests/utils.ts"; import { calculateBlurhash } from "./blurhash.ts"; describe("BlurhashPreprocessor", () => { diff --git a/package.json b/package.json index 185c1903..b1a2f0b9 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,9 @@ "check": "bunx tsc -p .", "test": "bun test", "run-api": "bun run packages/api/build.ts && cd dist && ln -s ../config config && bun run packages/api/index.js", - "run-worker": "bun run packages/worker/build.ts && cd dist && ln -s ../config config && bun run packages/worker/index.js" + "run-worker": "bun run packages/worker/build.ts && cd dist && ln -s ../config config && bun run packages/worker/index.js", + "dev": "bun run --hot packages/api/index.ts", + "worker:dev": "bun run --hot packages/worker/index.ts" }, "trustedDependencies": [ "@biomejs/biome", @@ -166,6 +168,7 @@ "@versia/client": "workspace:*", "@versia/kit": "workspace:*", "@versia/sdk": "workspace:*", + "@versia-server/tests": "workspace:*", "@versia-server/config": "workspace:*", "altcha-lib": "catalog:", "blurhash": "catalog:", diff --git a/packages/api/build.ts b/packages/api/build.ts index 05659774..c38fa947 100644 --- a/packages/api/build.ts +++ b/packages/api/build.ts @@ -1,6 +1,6 @@ import { readdir } from "node:fs/promises"; import { $, build } from "bun"; -import { routes } from "~/packages/api/routes"; +import { routes } from "./routes.ts"; console.log("Building..."); diff --git a/packages/api/package.json b/packages/api/package.json index edc4424f..35ab3d7a 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "@versia-server/config": "workspace:*", + "@versia-server/tests": "workspace:*", "@versia/kit": "workspace:*", "@versia/client": "workspace:*", "@versia/sdk": "workspace:*", diff --git a/packages/api/routes/api/auth/login/index.test.ts b/packages/api/routes/api/auth/login/index.test.ts index c96cff4e..c4f8f886 100644 --- a/packages/api/routes/api/auth/login/index.test.ts +++ b/packages/api/routes/api/auth/login/index.test.ts @@ -1,9 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application } from "@versia/kit/db"; import { config } from "@versia-server/config"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; import { randomString } from "@/math"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; const { users, deleteUsers, passwords } = await getTestUsers(1); diff --git a/packages/api/routes/api/auth/reset/index.test.ts b/packages/api/routes/api/auth/reset/index.test.ts index b2e4e47f..e36ebb34 100644 --- a/packages/api/routes/api/auth/reset/index.test.ts +++ b/packages/api/routes/api/auth/reset/index.test.ts @@ -1,9 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application } from "@versia/kit/db"; import { config } from "@versia-server/config"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; import { randomString } from "@/math"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; const { users, deleteUsers, passwords } = await getTestUsers(1); const token = randomString(32, "hex"); diff --git a/packages/api/routes/api/v1/accounts/[id]/block.test.ts b/packages/api/routes/api/v1/accounts/[id]/block.test.ts index bf4a16c1..38cedf46 100644 --- a/packages/api/routes/api/v1/accounts/[id]/block.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/block.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/follow.test.ts b/packages/api/routes/api/v1/accounts/[id]/follow.test.ts index 6331816e..4289139e 100644 --- a/packages/api/routes/api/v1/accounts/[id]/follow.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/follow.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/accounts/[id]/followers.test.ts b/packages/api/routes/api/v1/accounts/[id]/followers.test.ts index ec8f4c6c..cd5d93fd 100644 --- a/packages/api/routes/api/v1/accounts/[id]/followers.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/followers.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/[id]/following.test.ts b/packages/api/routes/api/v1/accounts/[id]/following.test.ts index 7d3a0134..6a78418a 100644 --- a/packages/api/routes/api/v1/accounts/[id]/following.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/following.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/[id]/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/index.test.ts index d0aff8ef..b4539209 100644 --- a/packages/api/routes/api/v1/accounts/[id]/index.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/index.test.ts @@ -1,5 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(5, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/accounts/[id]/mute.test.ts b/packages/api/routes/api/v1/accounts/[id]/mute.test.ts index 92816afe..88fb0889 100644 --- a/packages/api/routes/api/v1/accounts/[id]/mute.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/mute.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/note.test.ts b/packages/api/routes/api/v1/accounts/[id]/note.test.ts index 83f26c21..70603f17 100644 --- a/packages/api/routes/api/v1/accounts/[id]/note.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/note.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/pin.test.ts b/packages/api/routes/api/v1/accounts/[id]/pin.test.ts index 1cb446bd..a8867c49 100644 --- a/packages/api/routes/api/v1/accounts/[id]/pin.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/pin.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts b/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts index 434efc4e..c8563bee 100644 --- a/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts index c1ed1401..0a1aa481 100644 --- a/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let role: Role; diff --git a/packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts index b85cbf98..83b195a8 100644 --- a/packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let role: Role; diff --git a/packages/api/routes/api/v1/accounts/[id]/statuses.test.ts b/packages/api/routes/api/v1/accounts/[id]/statuses.test.ts index 012e133a..06675be4 100644 --- a/packages/api/routes/api/v1/accounts/[id]/statuses.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/statuses.test.ts @@ -3,7 +3,7 @@ import { generateClient, getTestStatuses, getTestUsers, -} from "~/tests/utils.ts"; +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(5, users[1])).toReversed(); diff --git a/packages/api/routes/api/v1/accounts/[id]/unblock.test.ts b/packages/api/routes/api/v1/accounts/[id]/unblock.test.ts index 8515bfb9..952cdc51 100644 --- a/packages/api/routes/api/v1/accounts/[id]/unblock.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unblock.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts b/packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts index 754c3fa1..8b8e08db 100644 --- a/packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/accounts/[id]/unmute.test.ts b/packages/api/routes/api/v1/accounts/[id]/unmute.test.ts index f4e5ce95..f70f2606 100644 --- a/packages/api/routes/api/v1/accounts/[id]/unmute.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unmute.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/[id]/unpin.test.ts b/packages/api/routes/api/v1/accounts/[id]/unpin.test.ts index eddcfd12..53a8963a 100644 --- a/packages/api/routes/api/v1/accounts/[id]/unpin.test.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unpin.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts b/packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts index 5ee5d2f1..f3a887ad 100644 --- a/packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts +++ b/packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils.ts"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/index.get.test.ts b/packages/api/routes/api/v1/accounts/index.get.test.ts index 3b82790a..4eb97a4e 100644 --- a/packages/api/routes/api/v1/accounts/index.get.test.ts +++ b/packages/api/routes/api/v1/accounts/index.get.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/index.post.test.ts b/packages/api/routes/api/v1/accounts/index.post.test.ts index 1938ca12..6a206cb7 100644 --- a/packages/api/routes/api/v1/accounts/index.post.test.ts +++ b/packages/api/routes/api/v1/accounts/index.post.test.ts @@ -1,9 +1,9 @@ import { afterEach, describe, expect, test } from "bun:test"; import { db } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { generateClient, getSolvedChallenge } from "@versia-server/tests"; import { eq } from "drizzle-orm"; import { randomString } from "@/math"; -import { generateClient, getSolvedChallenge } from "~/tests/utils"; const username = randomString(10, "hex"); const username2 = randomString(10, "hex"); diff --git a/packages/api/routes/api/v1/accounts/lookup/index.test.ts b/packages/api/routes/api/v1/accounts/lookup/index.test.ts index ce3a69a6..7745c34c 100644 --- a/packages/api/routes/api/v1/accounts/lookup/index.test.ts +++ b/packages/api/routes/api/v1/accounts/lookup/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/relationships/index.test.ts b/packages/api/routes/api/v1/accounts/relationships/index.test.ts index 5de24560..c44c43f7 100644 --- a/packages/api/routes/api/v1/accounts/relationships/index.test.ts +++ b/packages/api/routes/api/v1/accounts/relationships/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { db } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { eq } from "drizzle-orm"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/search/index.test.ts b/packages/api/routes/api/v1/accounts/search/index.test.ts index 6aeb39b6..ee07269a 100644 --- a/packages/api/routes/api/v1/accounts/search/index.test.ts +++ b/packages/api/routes/api/v1/accounts/search/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts b/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts index c07c5801..7420c83b 100644 --- a/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts +++ b/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, describe, expect, test } from "bun:test"; import { config } from "@versia-server/config"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(1); diff --git a/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts b/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts index ee11ef47..3af99a9d 100644 --- a/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts +++ b/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, describe, expect, test } from "bun:test"; import { config } from "@versia-server/config"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(1); diff --git a/packages/api/routes/api/v1/blocks/index.test.ts b/packages/api/routes/api/v1/blocks/index.test.ts index 71c8f512..f1d50a10 100644 --- a/packages/api/routes/api/v1/blocks/index.test.ts +++ b/packages/api/routes/api/v1/blocks/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/challenges/index.test.ts b/packages/api/routes/api/v1/challenges/index.test.ts index 1f856379..6c528537 100644 --- a/packages/api/routes/api/v1/challenges/index.test.ts +++ b/packages/api/routes/api/v1/challenges/index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v1/challenges describe("/api/v1/challenges", () => { diff --git a/packages/api/routes/api/v1/custom_emojis/index.test.ts b/packages/api/routes/api/v1/custom_emojis/index.test.ts index eca78e36..f3961616 100644 --- a/packages/api/routes/api/v1/custom_emojis/index.test.ts +++ b/packages/api/routes/api/v1/custom_emojis/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { db } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { inArray } from "drizzle-orm"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/emojis/[id]/index.test.ts b/packages/api/routes/api/v1/emojis/[id]/index.test.ts index 098633bd..2c13cf07 100644 --- a/packages/api/routes/api/v1/emojis/[id]/index.test.ts +++ b/packages/api/routes/api/v1/emojis/[id]/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { db } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { inArray } from "drizzle-orm"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let id = ""; diff --git a/packages/api/routes/api/v1/emojis/index.test.ts b/packages/api/routes/api/v1/emojis/index.test.ts index 3bff570f..09aef0f4 100644 --- a/packages/api/routes/api/v1/emojis/index.test.ts +++ b/packages/api/routes/api/v1/emojis/index.test.ts @@ -1,9 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { db } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { inArray } from "drizzle-orm"; import sharp from "sharp"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/instance/extended_description.test.ts b/packages/api/routes/api/v1/instance/extended_description.test.ts index c5b847ce..838b63f5 100644 --- a/packages/api/routes/api/v1/instance/extended_description.test.ts +++ b/packages/api/routes/api/v1/instance/extended_description.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v1/instance/extended_description describe("/api/v1/instance/extended_description", () => { diff --git a/packages/api/routes/api/v1/instance/privacy_policy.test.ts b/packages/api/routes/api/v1/instance/privacy_policy.test.ts index 396f982c..260c02ab 100644 --- a/packages/api/routes/api/v1/instance/privacy_policy.test.ts +++ b/packages/api/routes/api/v1/instance/privacy_policy.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v1/instance/privacy_policy describe("/api/v1/instance/privacy_policy", () => { diff --git a/packages/api/routes/api/v1/instance/rules.test.ts b/packages/api/routes/api/v1/instance/rules.test.ts index 017b0c53..3bbfdedf 100644 --- a/packages/api/routes/api/v1/instance/rules.test.ts +++ b/packages/api/routes/api/v1/instance/rules.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "bun:test"; import { config } from "@versia-server/config"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v1/instance/rules describe("/api/v1/instance/rules", () => { diff --git a/packages/api/routes/api/v1/instance/terms_of_service.test.ts b/packages/api/routes/api/v1/instance/terms_of_service.test.ts index eb529365..6c31a8dc 100644 --- a/packages/api/routes/api/v1/instance/terms_of_service.test.ts +++ b/packages/api/routes/api/v1/instance/terms_of_service.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v1/instance/terms_of_service describe("/api/v1/instance/terms_of_service", () => { diff --git a/packages/api/routes/api/v1/markers/index.test.ts b/packages/api/routes/api/v1/markers/index.test.ts index 0180a623..50826138 100644 --- a/packages/api/routes/api/v1/markers/index.test.ts +++ b/packages/api/routes/api/v1/markers/index.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(1); const timeline = await getTestStatuses(10, users[0]); diff --git a/packages/api/routes/api/v1/mutes/index.test.ts b/packages/api/routes/api/v1/mutes/index.test.ts index 5206d3be..09d6029e 100644 --- a/packages/api/routes/api/v1/mutes/index.test.ts +++ b/packages/api/routes/api/v1/mutes/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts b/packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts index a9035dff..114f00e8 100644 --- a/packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts +++ b/packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts @@ -1,7 +1,7 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import type { Notification } from "@versia/client/schemas"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import type { z } from "zod"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let notifications: z.infer[] = []; diff --git a/packages/api/routes/api/v1/notifications/[id]/index.test.ts b/packages/api/routes/api/v1/notifications/[id]/index.test.ts index 7bda7499..e15cd9c0 100644 --- a/packages/api/routes/api/v1/notifications/[id]/index.test.ts +++ b/packages/api/routes/api/v1/notifications/[id]/index.test.ts @@ -1,7 +1,7 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import type { Notification } from "@versia/client/schemas"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import type { z } from "zod"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let notifications: z.infer[] = []; diff --git a/packages/api/routes/api/v1/notifications/clear/index.test.ts b/packages/api/routes/api/v1/notifications/clear/index.test.ts index 7950cdbd..39a8c449 100644 --- a/packages/api/routes/api/v1/notifications/clear/index.test.ts +++ b/packages/api/routes/api/v1/notifications/clear/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts b/packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts index cb292b6b..6a08e547 100644 --- a/packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts +++ b/packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts @@ -1,7 +1,11 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import type { Notification } from "@versia/client/schemas"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; import type { z } from "zod"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); const statuses = await getTestStatuses(5, users[0]); diff --git a/packages/api/routes/api/v1/notifications/index.test.ts b/packages/api/routes/api/v1/notifications/index.test.ts index d03ebb89..84acbdcd 100644 --- a/packages/api/routes/api/v1/notifications/index.test.ts +++ b/packages/api/routes/api/v1/notifications/index.test.ts @@ -1,5 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); const timeline = (await getTestStatuses(5, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/profile/avatar.test.ts b/packages/api/routes/api/v1/profile/avatar.test.ts index 65d0a282..dda97144 100644 --- a/packages/api/routes/api/v1/profile/avatar.test.ts +++ b/packages/api/routes/api/v1/profile/avatar.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/profile/header.test.ts b/packages/api/routes/api/v1/profile/header.test.ts index 3bb348fe..c3277f45 100644 --- a/packages/api/routes/api/v1/profile/header.test.ts +++ b/packages/api/routes/api/v1/profile/header.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/packages/api/routes/api/v1/push/subscription/index.test.ts b/packages/api/routes/api/v1/push/subscription/index.test.ts index 0485c2df..5ed27c46 100644 --- a/packages/api/routes/api/v1/push/subscription/index.test.ts +++ b/packages/api/routes/api/v1/push/subscription/index.test.ts @@ -1,7 +1,7 @@ import { afterAll, beforeEach, describe, expect, test } from "bun:test"; import { PushSubscription } from "@versia/kit/db"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, tokens, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v1/roles/[id]/index.test.ts b/packages/api/routes/api/v1/roles/[id]/index.test.ts index f18f6f11..f17fed49 100644 --- a/packages/api/routes/api/v1/roles/[id]/index.test.ts +++ b/packages/api/routes/api/v1/roles/[id]/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); let role: Role; diff --git a/packages/api/routes/api/v1/roles/index.test.ts b/packages/api/routes/api/v1/roles/index.test.ts index 75832ec0..cffbb2b2 100644 --- a/packages/api/routes/api/v1/roles/index.test.ts +++ b/packages/api/routes/api/v1/roles/index.test.ts @@ -2,8 +2,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; import { config } from "@versia-server/config"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(1); let role: Role; diff --git a/packages/api/routes/api/v1/statuses/[id]/context.test.ts b/packages/api/routes/api/v1/statuses/[id]/context.test.ts index a7386c55..dc1c4508 100644 --- a/packages/api/routes/api/v1/statuses/[id]/context.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/context.test.ts @@ -1,5 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); const statuses = await getTestStatuses(1, users[0]); diff --git a/packages/api/routes/api/v1/statuses/[id]/favourite.test.ts b/packages/api/routes/api/v1/statuses/[id]/favourite.test.ts index 84a30665..b696fb29 100644 --- a/packages/api/routes/api/v1/statuses/[id]/favourite.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/favourite.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(2, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts b/packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts index f8521545..b75a995f 100644 --- a/packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts @@ -1,5 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(5, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/index.test.ts b/packages/api/routes/api/v1/statuses/[id]/index.test.ts index 6a98f25a..55331a85 100644 --- a/packages/api/routes/api/v1/statuses/[id]/index.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/index.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); const statuses = await getTestStatuses(1, users[0]); diff --git a/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts index 7a274016..24f2f457 100644 --- a/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts @@ -1,7 +1,11 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { Emoji, Media } from "@versia/kit/db"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(3); const timeline = (await getTestStatuses(2, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts b/packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts index c214f8d5..2666971f 100644 --- a/packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(3); const timeline = (await getTestStatuses(2, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/reblog.test.ts b/packages/api/routes/api/v1/statuses/[id]/reblog.test.ts index 26c447a7..ac75523e 100644 --- a/packages/api/routes/api/v1/statuses/[id]/reblog.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reblog.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); const statuses = await getTestStatuses(1, users[0]); diff --git a/packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts b/packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts index 6d1e0f78..5f999ab1 100644 --- a/packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts @@ -1,5 +1,9 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(5, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts b/packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts index 7b13db21..aa50ccfa 100644 --- a/packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(2, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts b/packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts index 3d89db0a..26e40f95 100644 --- a/packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts @@ -1,5 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); const statuses = await getTestStatuses(1, users[0]); diff --git a/packages/api/routes/api/v1/statuses/index.test.ts b/packages/api/routes/api/v1/statuses/index.test.ts index 552e9a52..12934bb4 100644 --- a/packages/api/routes/api/v1/statuses/index.test.ts +++ b/packages/api/routes/api/v1/statuses/index.test.ts @@ -3,10 +3,10 @@ import type { Status } from "@versia/client/schemas"; import { db, Media } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; import { config } from "@versia-server/config"; +import { generateClient, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; import { eq } from "drizzle-orm"; import type { z } from "zod"; -import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(5); let media: Media; diff --git a/packages/api/routes/api/v1/timelines/home.test.ts b/packages/api/routes/api/v1/timelines/home.test.ts index ca240f6a..77ade702 100644 --- a/packages/api/routes/api/v1/timelines/home.test.ts +++ b/packages/api/routes/api/v1/timelines/home.test.ts @@ -1,6 +1,10 @@ import { afterAll, describe, expect, test } from "bun:test"; import { config } from "@versia-server/config"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(10, users[0])).toReversed(); diff --git a/packages/api/routes/api/v1/timelines/public.test.ts b/packages/api/routes/api/v1/timelines/public.test.ts index 2d05b535..bf43ec76 100644 --- a/packages/api/routes/api/v1/timelines/public.test.ts +++ b/packages/api/routes/api/v1/timelines/public.test.ts @@ -1,6 +1,10 @@ import { afterAll, describe, expect, test } from "bun:test"; import { config } from "@versia-server/config"; -import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; +import { + generateClient, + getTestStatuses, + getTestUsers, +} from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(5); const timeline = (await getTestStatuses(10, users[0])).toReversed(); diff --git a/packages/api/routes/api/v2/filters/[id]/index.test.ts b/packages/api/routes/api/v2/filters/[id]/index.test.ts index 9e3ff960..1a7c7223 100644 --- a/packages/api/routes/api/v2/filters/[id]/index.test.ts +++ b/packages/api/routes/api/v2/filters/[id]/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v2/filters/index.test.ts b/packages/api/routes/api/v2/filters/index.test.ts index 06b6fc75..9a14716d 100644 --- a/packages/api/routes/api/v2/filters/index.test.ts +++ b/packages/api/routes/api/v2/filters/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { generateClient, getTestUsers } from "~/tests/utils"; +import { generateClient, getTestUsers } from "@versia-server/tests"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/packages/api/routes/api/v2/instance/index.test.ts b/packages/api/routes/api/v2/instance/index.test.ts index 90238e4d..7a32dae6 100644 --- a/packages/api/routes/api/v2/instance/index.test.ts +++ b/packages/api/routes/api/v2/instance/index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { generateClient } from "~/tests/utils"; +import { generateClient } from "@versia-server/tests"; // /api/v2/instance describe("/api/v2/instance", () => { diff --git a/packages/api/routes/inbox/index.test.ts b/packages/api/routes/inbox/index.test.ts index 225dcf89..51358c16 100644 --- a/packages/api/routes/inbox/index.test.ts +++ b/packages/api/routes/inbox/index.test.ts @@ -4,6 +4,11 @@ import { Notes, Reactions, Users } from "@versia/kit/tables"; import { sign } from "@versia/sdk/crypto"; import * as VersiaEntities from "@versia/sdk/entities"; import { config } from "@versia-server/config"; +import { + fakeRequest, + generateClient, + getTestUsers, +} from "@versia-server/tests"; import { randomUUIDv7, sleep } from "bun"; import { clearMocks, @@ -12,7 +17,6 @@ import { mock, } from "bun-bagel"; import { and, eq, isNull } from "drizzle-orm"; -import { fakeRequest, generateClient, getTestUsers } from "~/tests/utils"; const instanceUrl = new URL("https://versia.example.com"); const noteId = randomUUIDv7(); diff --git a/tests/oauth.test.ts b/packages/api/routes/oauth.test.ts similarity index 68% rename from tests/oauth.test.ts rename to packages/api/routes/oauth.test.ts index e466a1e8..e881f460 100644 --- a/tests/oauth.test.ts +++ b/packages/api/routes/oauth.test.ts @@ -1,10 +1,11 @@ -/** - * @deprecated - */ import { afterAll, describe, expect, test } from "bun:test"; -import type { Application, Token } from "@versia/client/schemas"; +import type { Token } from "@versia/client/schemas"; +import { + fakeRequest, + generateClient, + getTestUsers, +} from "@versia-server/tests"; import type { z } from "zod"; -import { fakeRequest, getTestUsers } from "./utils.ts"; let clientId: string; let clientSecret: string; @@ -17,36 +18,18 @@ afterAll(async () => { await deleteUsers(); }); -describe("POST /api/v1/apps/", () => { +describe("Login flow", () => { test("should create an application", async () => { - const formData = new FormData(); + const client = await generateClient(users[0]); - formData.append("client_name", "Test Application"); - formData.append("website", "https://example.com"); - formData.append("redirect_uris", "https://example.com"); - formData.append("scopes", "read write"); - - const response = await fakeRequest("/api/v1/apps", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - client_name: "Test Application", - website: "https://example.com", - redirect_uris: "https://example.com", - scopes: "read write", - }), + const { ok, data } = await client.createApp("Test Application", { + redirect_uris: "https://example.com", + website: "https://example.com", + scopes: ["read", "write"], }); - expect(response.status).toBe(200); - expect(response.headers.get("content-type")).toContain( - "application/json", - ); - - const json = await response.json(); - - expect(json).toEqual({ + expect(ok).toBe(true); + expect(data).toEqual({ name: "Test Application", website: "https://example.com", client_id: expect.any(String), @@ -57,12 +40,10 @@ describe("POST /api/v1/apps/", () => { scopes: ["read", "write"], }); - clientId = json.client_id; - clientSecret = json.client_secret; + clientId = data.client_id; + clientSecret = data.client_secret; }); -}); -describe("POST /api/auth/login/", () => { test("should get a JWT", async () => { const formData = new FormData(); @@ -83,9 +64,7 @@ describe("POST /api/auth/login/", () => { response.headers.get("Set-Cookie")?.match(/jwt=([^;]+);/)?.[1] ?? ""; }); -}); -describe("GET /oauth/authorize/", () => { test("should get a code", async () => { const response = await fakeRequest("/oauth/authorize", { method: "POST", @@ -113,9 +92,7 @@ describe("GET /oauth/authorize/", () => { code = locationHeader.searchParams.get("code") ?? ""; }); -}); -describe("POST /oauth/token/", () => { test("should get an access token", async () => { const response = await fakeRequest("/oauth/token", { method: "POST", @@ -151,24 +128,19 @@ describe("POST /oauth/token/", () => { token = json; }); -}); -describe("GET /api/v1/apps/verify_credentials", () => { test("should return the authenticated application's credentials", async () => { - const response = await fakeRequest("/api/v1/apps/verify_credentials", { + const client = await generateClient(users[0]); + + const { ok, data } = await client.verifyAppCredentials({ headers: { Authorization: `Bearer ${token.access_token}`, }, }); - expect(response.status).toBe(200); - expect(response.headers.get("content-type")).toContain( - "application/json", - ); + expect(ok).toBe(true); - const credentials = (await response.json()) as Partial< - z.infer - >; + const credentials = data; expect(credentials.name).toBe("Test Application"); expect(credentials.website).toBe("https://example.com"); diff --git a/tests/utils.ts b/packages/tests/index.ts similarity index 100% rename from tests/utils.ts rename to packages/tests/index.ts diff --git a/packages/tests/package.json b/packages/tests/package.json new file mode 100644 index 00000000..cc92261c --- /dev/null +++ b/packages/tests/package.json @@ -0,0 +1,20 @@ +{ + "name": "@versia-server/tests", + "module": "index.ts", + "type": "module", + "version": "0.0.1", + "private": true, + "exports": { + ".": { + "import": "./index.ts", + "default": "./index.ts" + } + }, + "dependencies": { + "@versia-server/config": "workspace:*", + "@versia/kit": "workspace:*", + "@versia/client": "workspace:*", + "altcha-lib": "catalog:", + "drizzle-orm": "catalog:" + } +} diff --git a/tests/setup.ts b/packages/tests/setup.ts similarity index 76% rename from tests/setup.ts rename to packages/tests/setup.ts index 517a7f9d..01c9ffcd 100644 --- a/tests/setup.ts +++ b/packages/tests/setup.ts @@ -1,5 +1,5 @@ import { setupDatabase } from "@versia/kit/db"; -import { deleteOldTestUsers } from "./utils.ts"; +import { deleteOldTestUsers } from "./index.ts"; await setupDatabase(); await deleteOldTestUsers(); diff --git a/plugins/openid/routes/authorize.test.ts b/plugins/openid/routes/authorize.test.ts index 7d045945..4d30bae4 100644 --- a/plugins/openid/routes/authorize.test.ts +++ b/plugins/openid/routes/authorize.test.ts @@ -2,10 +2,10 @@ import { afterAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Application } from "@versia/kit/db"; import { config } from "@versia-server/config"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; import { SignJWT } from "jose"; import { randomString } from "@/math"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; const { deleteUsers, tokens, users } = await getTestUsers(1); const privateKey = await crypto.subtle.importKey( diff --git a/plugins/openid/routes/jwks.test.ts b/plugins/openid/routes/jwks.test.ts index 876769c1..3d05b3a3 100644 --- a/plugins/openid/routes/jwks.test.ts +++ b/plugins/openid/routes/jwks.test.ts @@ -1,7 +1,7 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application } from "@versia/kit/db"; +import { fakeRequest } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { fakeRequest } from "~/tests/utils"; const application = await Application.insert({ id: randomUUIDv7(), diff --git a/plugins/openid/routes/oauth/revoke.test.ts b/plugins/openid/routes/oauth/revoke.test.ts index 14a74d45..c5454c25 100644 --- a/plugins/openid/routes/oauth/revoke.test.ts +++ b/plugins/openid/routes/oauth/revoke.test.ts @@ -1,7 +1,7 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application, Token } from "@versia/kit/db"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; const { deleteUsers, users } = await getTestUsers(1); diff --git a/plugins/openid/routes/oauth/token.test.ts b/plugins/openid/routes/oauth/token.test.ts index f30d5ab6..dbf57f20 100644 --- a/plugins/openid/routes/oauth/token.test.ts +++ b/plugins/openid/routes/oauth/token.test.ts @@ -1,7 +1,7 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application, Token } from "@versia/kit/db"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; import { randomUUIDv7 } from "bun"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; const { deleteUsers, users } = await getTestUsers(1); diff --git a/plugins/openid/routes/sso/:id/index.test.ts b/plugins/openid/routes/sso/:id/index.test.ts index 0bf270d3..2e2ccf5e 100644 --- a/plugins/openid/routes/sso/:id/index.test.ts +++ b/plugins/openid/routes/sso/:id/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; const { deleteUsers, tokens } = await getTestUsers(1); diff --git a/plugins/openid/routes/sso/index.test.ts b/plugins/openid/routes/sso/index.test.ts index 56e717e2..4f35bcd0 100644 --- a/plugins/openid/routes/sso/index.test.ts +++ b/plugins/openid/routes/sso/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { fakeRequest, getTestUsers } from "~/tests/utils"; +import { fakeRequest, getTestUsers } from "@versia-server/tests"; const { deleteUsers, tokens } = await getTestUsers(1); diff --git a/tests/test-image.webp b/tests/test-image.webp deleted file mode 100755 index 661d0ebabe432a8e5b89deaf50e60a31b6dad1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76372 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 Of=R}Ke?%=g0001FBc#Cq