/
aaronair
/
Test_task_rt_solution
Обзор
Документация
Войти
/
aaronair
/
Test_task_rt_solution
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/tests/api.test.ts
60 строк
2 KB
Ilikedrinkpivo
first_commit
28 май 2026, 14:51
28 май 2026, 14:51
b4498fc
Код
Авторство
О чём код?
import { afterAll, beforeAll, describe, expect, it } from "vitest"; import type { FastifyInstance } from "fastify"; import { bootstrapApp } from "../src/index.js"; const hasIntegrationEnv = Boolean(process.env.DATABASE_URL); describe.skipIf(!hasIntegrationEnv)("API integration", () => { let app: FastifyInstance; beforeAll(async () => { process.env.RUN_MIGRATIONS ??= "1"; process.env.SEED_IF_EMPTY ??= "0"; process.env.CORS_ORIGIN ??= "http://localhost:5173"; process.env.S3_ENDPOINT ??= "http://127.0.0.1:9000"; process.env.S3_ACCESS_KEY ??= "minioadmin"; process.env.S3_SECRET_KEY ??= "minioadmin"; process.env.S3_BUCKET ??= "ai-portal-documents-test"; const boot = await bootstrapApp(); app = boot.app; await app.ready(); }, 60_000); afterAll(async () => { await app.close(); }); it("GET /healthz returns ok", async () => { const res = await app.inject({ method: "GET", url: "/healthz" }); expect(res.statusCode).toBe(200); expect(res.json()).toEqual({ ok: true }); }); it("GET /api/v1/initiatives returns paginated list", async () => { const res = await app.inject({ method: "GET", url: "/api/v1/initiatives?limit=5", }); expect(res.statusCode).toBe(200); const body = res.json() as { data: unknown[]; meta: { total: number } }; expect(Array.isArray(body.data)).toBe(true); expect(typeof body.meta.total).toBe("number"); }); it("POST /api/v1/initiatives/:id/comments validates body", async () => { const list = await app.inject({ method: "GET", url: "/api/v1/initiatives?limit=1", }); const slug = (list.json() as { data: { id: string }[] }).data[0]?.id; if (!slug) return; const bad = await app.inject({ method: "POST", url: `/api/v1/initiatives/${slug}/comments`, payload: { author_name: "X", text: "" }, }); expect(bad.statusCode).toBe(400); }); });