import { describe, expect, it } from "vitest"; import { z } from "zod"; import { API_ERROR_STATUS, apiResponse, CapabilityId, CursorQuery, EventEnvelope, Id } from "../src/index.ts"; describe("contracts", () => { it("Id 只接受 uuid", () => { expect(Id.safeParse("7d3f7f5e-8a8c-4b8e-9f0a-1b2c3d4e5f60").success).toBe(true); expect(Id.safeParse("abc").success).toBe(false); }); it("CursorQuery 默认 limit 50 且限制上限", () => { expect(CursorQuery.parse({}).limit).toBe(50); expect(CursorQuery.safeParse({ limit: 1000 }).success).toBe(false); }); it("ApiResponse 信封", () => { const s = apiResponse(z.object({ n: z.number() })); expect(s.parse({ ok: true, data: { n: 1 } }).data?.n).toBe(1); expect(s.safeParse({ ok: false, error: { code: "nope", message: "" } }).success).toBe(false); }); it("错误码都有 HTTP 状态", () => { expect(API_ERROR_STATUS.not_found).toBe(404); }); it("事件信封与能力 ID", () => { expect( EventEnvelope.safeParse({ seq: 1, type: "system.heartbeat", at: new Date().toISOString(), payload: {} }).success, ).toBe(true); expect(CapabilityId.safeParse("download.submit").success).toBe(true); expect(CapabilityId.safeParse("Download").success).toBe(false); }); });