import { describe, expect, it } from "vitest"; import { repos } from "@cfdm/db"; import { buildApp } from "../src/app.js"; import { loadConfig } from "../src/config.js"; async function authHeaders(app: Awaited>) { const config = loadConfig(); const res = await app.inject({ method: "POST", url: "/api/v1/auth/login", payload: { username: config.adminUsername, password: "admin" }, }); expect(res.statusCode).toBe(200); const { token } = res.json() as { token: string }; return { authorization: `Bearer ${token}` }; } describe("services reorder", () => { it("PATCH /services/reorder persists order within group and ungrouped", async () => { const app = await buildApp({ config: { ...loadConfig(), staticDir: null }, memory: true, }); const headers = await authHeaders(app); const group = repos.createServiceGroup(app.db, "VPN", "vpn", null, null); const alpha = repos.createService(app.db, "Alpha", "alpha"); const beta = repos.createService(app.db, "Beta", "beta"); const gamma = repos.createService(app.db, "Gamma", "gamma"); repos.setServiceGroup(app.db, alpha.id, group.id); repos.setServiceGroup(app.db, beta.id, group.id); const reorderRes = await app.inject({ method: "PATCH", url: "/api/v1/services/reorder", headers, payload: { group_id: group.id, service_ids: [beta.id, alpha.id], }, }); expect(reorderRes.statusCode).toBe(200); const grouped = repos.listServicesByGroup(app.db, group.id); expect(grouped.map((s) => s.id)).toEqual([beta.id, alpha.id]); const ungroupedReorderRes = await app.inject({ method: "PATCH", url: "/api/v1/services/reorder", headers, payload: { group_id: null, service_ids: [gamma.id], }, }); expect(ungroupedReorderRes.statusCode).toBe(200); const ungrouped = repos.listUngroupedServices(app.db); expect(ungrouped[0]?.id).toBe(gamma.id); await app.close(); }); });