import { beforeEach, describe, expect, it, vi } from "vitest"; const requireCommissionUser = vi.fn(); const limitRequest = vi.fn(); const insert = vi.fn(); const values = vi.fn(); const onConflictDoUpdate = vi.fn(); vi.mock("@/lib/commission/server", () => ({ requireCommissionUser })); vi.mock("@/lib/security/rate-limit", () => ({ limitRequest })); vi.mock("@/db", () => ({ getDb: () => ({ insert }) })); vi.mock("@/lib/commission/push", () => ({ pushPublicKey: () => "public-key", validPushEndpoint: (value: string) => value.startsWith("https://fcm.googleapis.com/"), })); const { GET, POST } = await import("./route"); const subscription = { endpoint: "https://fcm.googleapis.com/fcm/send/token", keys: { p256dh: "a".repeat(87), auth: "b".repeat(22) } }; function request(scope: "customer" | "admin", endpoint = subscription.endpoint) { return new Request("https://guide.sudloh.com/api/commission/push-subscription", { method: "POST", headers: { Origin: "https://guide.sudloh.com", "Content-Type": "application/json" }, body: JSON.stringify({ ...subscription, endpoint, scope }), }); } describe("commission push subscriptions", () => { beforeEach(() => { vi.clearAllMocks(); process.env.BETTER_AUTH_URL = "https://guide.sudloh.com"; requireCommissionUser.mockResolvedValue({ id: "customer-1", role: "user", emailVerified: true }); insert.mockReturnValue({ values }); values.mockReturnValue({ onConflictDoUpdate }); onConflictDoUpdate.mockResolvedValue(undefined); }); it("rejects customer registration for admin notifications", async () => { expect((await POST(request("admin"))).status).toBe(403); expect(insert).not.toHaveBeenCalled(); }); it("only offers admin push scope to verified admins", async () => { expect(await (await GET()).json()).toEqual({ publicKey: "public-key", canAdmin: false }); requireCommissionUser.mockResolvedValue({ id: "admin-1", role: "admin", emailVerified: false }); expect(await (await GET()).json()).toEqual({ publicKey: "public-key", canAdmin: false }); requireCommissionUser.mockResolvedValue({ id: "admin-1", role: "admin", emailVerified: true }); expect(await (await GET()).json()).toEqual({ publicKey: "public-key", canAdmin: true }); }); it("rejects a push endpoint outside browser push services", async () => { expect((await POST(request("customer", "https://internal.example/push"))).status).toBe(400); expect(insert).not.toHaveBeenCalled(); }); it("stores a subscription for the authenticated customer", async () => { expect((await POST(request("customer"))).status).toBe(204); expect(values).toHaveBeenCalledWith(expect.objectContaining({ endpoint: subscription.endpoint, userId: "customer-1", scope: "customer", })); }); });