상위 디렉터리 및 카테고리의 소유권을 검증하지 않던 문제 등 버그 수정 및 Vitest 기반 테스트 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
staticandClaude Opus 5.5 committed 2026-10-11 23:45:56 +09:00
1 parent 67989f4741
commit ed732be999
31 files changed
+2057 -42

No files matched your search

+53
View File
@@ -0,0 +1,53 @@
import { PostgreSqlContainer, type StartedPostgreSqlContainer } from "@testcontainers/postgresql";
import { Kysely, PostgresDialect } from "kysely";
import { Migrator } from "kysely/migration";
import pg from "pg";
import type { TestProject } from "vitest/node";
import migrations from "../../src/lib/server/db/migrations";
declare module "vitest" {
export interface ProvidedContext {
database: {
host: string;
port: number;
user: string;
password: string;
name: string;
};
}
}
let container: StartedPostgreSqlContainer | undefined;
export const setup = async (project: TestProject) => {
container = await new PostgreSqlContainer("postgres:17").start();
const database = {
host: container.getHost(),
port: container.getPort(),
user: container.getUsername(),
password: container.getPassword(),
name: container.getDatabase(),
};
const db = new Kysely({
dialect: new PostgresDialect({
pool: new pg.Pool({ ...database, database: database.name }),
}),
});
try {
const { error } = await new Migrator({
db,
provider: { getMigrations: async () => migrations },
}).migrateToLatest();
if (error) throw error;
} finally {
await db.destroy();
}
project.provide("database", database);
};
export const teardown = async () => {
await container?.stop();
};
+13
View File
@@ -0,0 +1,13 @@
// Node.js 22 doesn't support base64 conversion of Uint8Array yet (latest Chromium does)
if (!Uint8Array.prototype.toBase64) {
Uint8Array.prototype.toBase64 = function () {
return Buffer.from(this.buffer, this.byteOffset, this.byteLength).toString("base64");
};
}
if (!Uint8Array.fromBase64) {
Uint8Array.fromBase64 = (data: string) => {
return new Uint8Array(Buffer.from(data, "base64"));
};
}
+20
View File
@@ -0,0 +1,20 @@
import { mkdtemp } from "fs/promises";
import { tmpdir } from "os";
import { join } from "path";
import { vi } from "vitest";
const storagePath = await mkdtemp(join(tmpdir(), "arkvault-test-"));
vi.mock("#lib/server/loadenv.js", async () => {
const { inject } = await import("vitest");
return {
default: {
nodeEnv: "test",
database: inject("database"),
session: { secret: "test-secret", exp: 14 * 24 * 3600 * 1000 },
challenge: { userClientExp: 5 * 60 * 1000, sessionUpgradeExp: 5 * 60 * 1000 },
libraryPath: join(storagePath, "library"),
thumbnailsPath: join(storagePath, "thumbnails"),
},
};
});