feat: add extensive test suite

This commit is contained in:
2026-08-30 11:33:53 +07:00 Unverified
parent 061cce00dc
commit 8359c7272e
131 changed files with 8717 additions and 2200 deletions
+17 -10
View File
@@ -7,16 +7,23 @@ import { adminCheck } from "@/lib/auth";
import { db } from "@/lib/db";
import { guides } from "@/lib/db/schema";
import { forceRefresh } from "../settings/api";
import { hideGuideService } from "./service";
export async function hideGuide(id: string) {
if (!(await adminCheck())) redirect("/login");
await db
.update(guides)
.set({
hidden: not(guides.hidden),
})
.where(eq(guides.id, id));
forceRefresh("/guide");
revalidatePath("/admin/guide");
return hideGuideService(id, {
adminCheck: async () => {
if (!(await adminCheck())) redirect("/login");
return true;
},
toggle: async (guideId) => {
await db
.update(guides)
.set({ hidden: not(guides.hidden) })
.where(eq(guides.id, guideId));
},
afterToggle: async () => {
await forceRefresh("/guide");
revalidatePath("/admin/guide");
},
});
}
+30
View File
@@ -0,0 +1,30 @@
import { describe, expect, mock, test } from "bun:test";
import { hideGuideService } from "./service";
describe("hideGuideService", () => {
test("rejects anonymous callers before mutation", async () => {
const toggle = mock(async (_id: string) => {});
expect(
hideGuideService("guide", {
adminCheck: async () => false,
toggle,
afterToggle: async () => {},
}),
).rejects.toBe("Unauthorized");
expect(toggle).not.toHaveBeenCalled();
});
test("toggles before refreshing guide views", async () => {
const calls: string[] = [];
await hideGuideService("guide", {
adminCheck: async () => true,
toggle: async (id) => {
calls.push(`toggle:${id}`);
},
afterToggle: async () => {
calls.push("refresh");
},
});
expect(calls).toEqual(["toggle:guide", "refresh"]);
});
});
+14
View File
@@ -0,0 +1,14 @@
export interface HideGuideDependencies {
adminCheck: () => Promise<unknown>;
toggle: (id: string) => Promise<void>;
afterToggle: () => Promise<void> | void;
}
export async function hideGuideService(
id: string,
dependencies: HideGuideDependencies,
) {
if (!(await dependencies.adminCheck())) throw "Unauthorized";
await dependencies.toggle(id);
await dependencies.afterToggle();
}