mirror of
https://github.com/versia-pub/server.git
synced 2026-03-12 21:39:15 +01:00
refactor: 🚚 Move testing to its own sub-package
This commit is contained in:
parent
a211772309
commit
fde70fa61a
82 changed files with 207 additions and 125 deletions
|
|
@ -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...");
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@versia-server/config": "workspace:*",
|
||||
"@versia-server/tests": "workspace:*",
|
||||
"@versia/kit": "workspace:*",
|
||||
"@versia/client": "workspace:*",
|
||||
"@versia/sdk": "workspace:*",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = "";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<typeof Notification>[] = [];
|
||||
|
|
|
|||
|
|
@ -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<typeof Notification>[] = [];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
148
packages/api/routes/oauth.test.ts
Normal file
148
packages/api/routes/oauth.test.ts
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
import { afterAll, describe, expect, test } from "bun:test";
|
||||
import type { Token } from "@versia/client/schemas";
|
||||
import {
|
||||
fakeRequest,
|
||||
generateClient,
|
||||
getTestUsers,
|
||||
} from "@versia-server/tests";
|
||||
import type { z } from "zod";
|
||||
|
||||
let clientId: string;
|
||||
let clientSecret: string;
|
||||
let code: string;
|
||||
let jwt: string;
|
||||
let token: z.infer<typeof Token>;
|
||||
const { users, passwords, deleteUsers } = await getTestUsers(1);
|
||||
|
||||
afterAll(async () => {
|
||||
await deleteUsers();
|
||||
});
|
||||
|
||||
describe("Login flow", () => {
|
||||
test("should create an application", async () => {
|
||||
const client = await generateClient(users[0]);
|
||||
|
||||
const { ok, data } = await client.createApp("Test Application", {
|
||||
redirect_uris: "https://example.com",
|
||||
website: "https://example.com",
|
||||
scopes: ["read", "write"],
|
||||
});
|
||||
|
||||
expect(ok).toBe(true);
|
||||
expect(data).toEqual({
|
||||
name: "Test Application",
|
||||
website: "https://example.com",
|
||||
client_id: expect.any(String),
|
||||
client_secret: expect.any(String),
|
||||
client_secret_expires_at: "0",
|
||||
redirect_uri: "https://example.com",
|
||||
redirect_uris: ["https://example.com"],
|
||||
scopes: ["read", "write"],
|
||||
});
|
||||
|
||||
clientId = data.client_id;
|
||||
clientSecret = data.client_secret;
|
||||
});
|
||||
|
||||
test("should get a JWT", async () => {
|
||||
const formData = new FormData();
|
||||
|
||||
formData.append("identifier", users[0]?.data.email ?? "");
|
||||
formData.append("password", passwords[0]);
|
||||
|
||||
const response = await fakeRequest(
|
||||
`/api/auth/login?client_id=${clientId}&redirect_uri=https://example.com&response_type=code&scope=read+write`,
|
||||
{
|
||||
method: "POST",
|
||||
body: formData,
|
||||
},
|
||||
);
|
||||
|
||||
expect(response.status).toBe(302);
|
||||
|
||||
jwt =
|
||||
response.headers.get("Set-Cookie")?.match(/jwt=([^;]+);/)?.[1] ??
|
||||
"";
|
||||
});
|
||||
|
||||
test("should get a code", async () => {
|
||||
const response = await fakeRequest("/oauth/authorize", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
Cookie: `jwt=${jwt}`,
|
||||
},
|
||||
body: new URLSearchParams({
|
||||
client_id: clientId,
|
||||
client_secret: clientSecret,
|
||||
redirect_uri: "https://example.com",
|
||||
response_type: "code",
|
||||
scope: "read write",
|
||||
max_age: "604800",
|
||||
}),
|
||||
});
|
||||
|
||||
expect(response.status).toBe(302);
|
||||
expect(response.headers.get("location")).toBeDefined();
|
||||
const locationHeader = new URL(
|
||||
response.headers.get("Location") ?? "",
|
||||
"",
|
||||
);
|
||||
|
||||
expect(locationHeader.origin).toBe("https://example.com");
|
||||
|
||||
code = locationHeader.searchParams.get("code") ?? "";
|
||||
});
|
||||
|
||||
test("should get an access token", async () => {
|
||||
const response = await fakeRequest("/oauth/token", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
Authorization: `Bearer ${jwt}`,
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
},
|
||||
body: new URLSearchParams({
|
||||
grant_type: "authorization_code",
|
||||
code,
|
||||
redirect_uri: "https://example.com",
|
||||
client_id: clientId,
|
||||
client_secret: clientSecret,
|
||||
scope: "read write",
|
||||
}),
|
||||
});
|
||||
|
||||
const json = await response.json();
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.headers.get("content-type")).toContain(
|
||||
"application/json",
|
||||
);
|
||||
expect(json).toEqual({
|
||||
access_token: expect.any(String),
|
||||
token_type: "Bearer",
|
||||
scope: "read write",
|
||||
created_at: expect.any(Number),
|
||||
expires_in: expect.any(Number),
|
||||
id_token: null,
|
||||
refresh_token: null,
|
||||
});
|
||||
|
||||
token = json;
|
||||
});
|
||||
|
||||
test("should return the authenticated application's credentials", async () => {
|
||||
const client = await generateClient(users[0]);
|
||||
|
||||
const { ok, data } = await client.verifyAppCredentials({
|
||||
headers: {
|
||||
Authorization: `Bearer ${token.access_token}`,
|
||||
},
|
||||
});
|
||||
|
||||
expect(ok).toBe(true);
|
||||
|
||||
const credentials = data;
|
||||
|
||||
expect(credentials.name).toBe("Test Application");
|
||||
expect(credentials.website).toBe("https://example.com");
|
||||
});
|
||||
});
|
||||
246
packages/tests/index.ts
Normal file
246
packages/tests/index.ts
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
import { mock } from "bun:test";
|
||||
import { Client as VersiaClient } from "@versia/client";
|
||||
import { db, Note, setupDatabase, Token, User } from "@versia/kit/db";
|
||||
import { Notes, Users } from "@versia/kit/tables";
|
||||
import { config } from "@versia-server/config";
|
||||
import { solveChallenge } from "altcha-lib";
|
||||
import { env, randomUUIDv7 } from "bun";
|
||||
import { asc, type InferSelectModel, inArray, like } from "drizzle-orm";
|
||||
import { generateChallenge } from "@/challenges";
|
||||
import { randomString } from "@/math";
|
||||
import { searchManager } from "~/classes/search/search-manager";
|
||||
import { appFactory } from "~/packages/api/app";
|
||||
|
||||
env.DISABLE_RATE_LIMIT = "true";
|
||||
await setupDatabase();
|
||||
|
||||
if (config.search.enabled) {
|
||||
await searchManager.connect();
|
||||
}
|
||||
|
||||
const app = await appFactory();
|
||||
|
||||
export function fakeRequest(
|
||||
url: URL | string,
|
||||
init?: RequestInit,
|
||||
): Promise<Response> {
|
||||
return Promise.resolve(
|
||||
app.fetch(new Request(new URL(url, config.http.base_url), init)),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a client instance monkeypatched to use the test server
|
||||
* instead of going through HTTP, and also doesn't throw on errors
|
||||
* @param user User to automatically generate a token for
|
||||
* @returns Client instance
|
||||
*/
|
||||
export const generateClient = async (
|
||||
user?: User,
|
||||
): Promise<
|
||||
VersiaClient & {
|
||||
[Symbol.asyncDispose](): Promise<void>;
|
||||
dbToken: Token;
|
||||
}
|
||||
> => {
|
||||
const token = user
|
||||
? await Token.insert({
|
||||
id: randomUUIDv7(),
|
||||
accessToken: randomString(32, "hex"),
|
||||
tokenType: "bearer",
|
||||
userId: user.id,
|
||||
applicationId: null,
|
||||
code: randomString(32, "hex"),
|
||||
scope: "read write follow push",
|
||||
})
|
||||
: null;
|
||||
|
||||
const client = new VersiaClient(
|
||||
new URL(config.http.base_url),
|
||||
token?.data.accessToken,
|
||||
);
|
||||
|
||||
// biome-ignore lint/complexity/useLiteralKeys: Overriding private properties
|
||||
client["fetch"] = (
|
||||
input: RequestInfo | string | URL | Request,
|
||||
init?: RequestInit,
|
||||
): Promise<Response> => {
|
||||
return Promise.resolve(app.fetch(new Request(input, init)));
|
||||
};
|
||||
|
||||
// @ts-expect-error This is REAL monkeypatching done by REAL programmers, BITCH!
|
||||
client[Symbol.asyncDispose] = async (): Promise<void> => {
|
||||
await token?.delete();
|
||||
};
|
||||
|
||||
// @ts-expect-error More monkeypatching
|
||||
client.dbToken = token;
|
||||
|
||||
return client as VersiaClient & {
|
||||
[Symbol.asyncDispose](): Promise<void>;
|
||||
dbToken: Token;
|
||||
};
|
||||
};
|
||||
export const deleteOldTestUsers = async (): Promise<void> => {
|
||||
// Deletes all users that match the test username (test-<32 random characters>)
|
||||
await db.delete(Users).where(like(Users.username, "test-%"));
|
||||
};
|
||||
|
||||
export const getTestUsers = async (
|
||||
count: number,
|
||||
): Promise<{
|
||||
users: User[];
|
||||
tokens: Token[];
|
||||
passwords: string[];
|
||||
deleteUsers: () => Promise<void>;
|
||||
}> => {
|
||||
const users: User[] = [];
|
||||
const passwords: string[] = [];
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
const password = randomString(32, "hex");
|
||||
|
||||
const user = await User.register(`test-${randomString(8, "hex")}`, {
|
||||
email: `${randomString(16, "hex")}@test.com`,
|
||||
password,
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
throw new Error("Failed to create test user");
|
||||
}
|
||||
|
||||
passwords.push(password);
|
||||
users.push(user);
|
||||
}
|
||||
|
||||
const tokens = await Token.insertMany(
|
||||
users.map((u) => ({
|
||||
id: randomUUIDv7(),
|
||||
accessToken: randomString(32, "hex"),
|
||||
tokenType: "bearer",
|
||||
userId: u.id,
|
||||
applicationId: null,
|
||||
code: randomString(32, "hex"),
|
||||
scope: "read write follow push",
|
||||
})),
|
||||
);
|
||||
|
||||
return {
|
||||
users,
|
||||
// Order tokens in the same order as users
|
||||
// The first token belongs to the first user, the second token belongs to the second user, etc.
|
||||
tokens: users.map(
|
||||
(u) => tokens.find((t) => t.data.userId === u.id) as Token,
|
||||
),
|
||||
passwords,
|
||||
deleteUsers: async (): Promise<void> => {
|
||||
await db.delete(Users).where(
|
||||
inArray(
|
||||
Users.id,
|
||||
users.map((u) => u.id),
|
||||
),
|
||||
);
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const getTestStatuses = async (
|
||||
count: number,
|
||||
user: User,
|
||||
partial?: Partial<InferSelectModel<typeof Notes>>,
|
||||
): Promise<Note["data"][]> => {
|
||||
const statuses: Note[] = [];
|
||||
|
||||
for (let i = 0; i < count; i++) {
|
||||
const newStatus = await Note.insert({
|
||||
id: randomUUIDv7(),
|
||||
content: `${i} ${randomString(32, "hex")}`,
|
||||
authorId: user.id,
|
||||
sensitive: false,
|
||||
updatedAt: new Date().toISOString(),
|
||||
visibility: "public",
|
||||
applicationId: null,
|
||||
...partial,
|
||||
});
|
||||
|
||||
if (!newStatus) {
|
||||
throw new Error("Failed to create test status");
|
||||
}
|
||||
|
||||
statuses.push(newStatus);
|
||||
}
|
||||
|
||||
return (
|
||||
await Note.manyFromSql(
|
||||
inArray(
|
||||
Notes.id,
|
||||
statuses.map((s) => s.id),
|
||||
),
|
||||
asc(Notes.id),
|
||||
undefined,
|
||||
undefined,
|
||||
user.id,
|
||||
)
|
||||
).map((n) => n.data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates a solved challenge (with tiny difficulty)
|
||||
*
|
||||
* Only to be used in tests
|
||||
* @returns Base64 encoded payload
|
||||
*/
|
||||
export const getSolvedChallenge = async (): Promise<string> => {
|
||||
const { challenge } = await generateChallenge(100);
|
||||
|
||||
const solution = await solveChallenge(
|
||||
challenge.challenge,
|
||||
challenge.salt,
|
||||
challenge.algorithm,
|
||||
challenge.maxnumber,
|
||||
).promise;
|
||||
|
||||
if (!solution) {
|
||||
throw new Error("Failed to solve challenge");
|
||||
}
|
||||
|
||||
return Buffer.from(
|
||||
JSON.stringify({
|
||||
number: solution.number,
|
||||
algorithm: challenge.algorithm,
|
||||
challenge: challenge.challenge,
|
||||
salt: challenge.salt,
|
||||
signature: challenge.signature,
|
||||
}),
|
||||
).toString("base64");
|
||||
};
|
||||
|
||||
/**
|
||||
* Mocks a module for the duration of a test
|
||||
* Workaround for https://github.com/oven-sh/bun/issues/7823
|
||||
*
|
||||
* @param modulePath - The path starting from this files' path.
|
||||
* @param renderMocks - Function to generate mocks (by their named or default exports)
|
||||
* @returns An object with a dispose method
|
||||
*/
|
||||
export const mockModule = async (
|
||||
modulePath: string,
|
||||
renderMocks: () => Record<string, unknown>,
|
||||
): Promise<{
|
||||
[Symbol.dispose](): void;
|
||||
}> => {
|
||||
const original = {
|
||||
...(await import(modulePath)),
|
||||
};
|
||||
const mocks = renderMocks();
|
||||
const result = {
|
||||
...original,
|
||||
...mocks,
|
||||
};
|
||||
mock.module(modulePath, () => result);
|
||||
return {
|
||||
[Symbol.dispose]: (): void => {
|
||||
mock.module(modulePath, () => original);
|
||||
},
|
||||
};
|
||||
};
|
||||
20
packages/tests/package.json
Normal file
20
packages/tests/package.json
Normal file
|
|
@ -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:"
|
||||
}
|
||||
}
|
||||
8
packages/tests/setup.ts
Normal file
8
packages/tests/setup.ts
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import { setupDatabase } from "@versia/kit/db";
|
||||
import { deleteOldTestUsers } from "./index.ts";
|
||||
|
||||
await setupDatabase();
|
||||
await deleteOldTestUsers();
|
||||
|
||||
// Start workers
|
||||
await import("~/packages/worker/index.ts");
|
||||
Loading…
Add table
Add a link
Reference in a new issue