import { IntegrationHarness } from "@/pkg/testutil/integration-harness"; import type { V1ApisCreateApiRequest, V1ApisCreateApiResponse } from "@/routes/v1_apis_createApi"; import type { V1KeysCreateKeyRequest, V1KeysCreateKeyResponse } from "@/routes/v1_keys_createKey"; import { V1KeysDeleteKeyRequest, V1KeysDeleteKeyResponse } from "@/routes/v1_keys_deleteKey"; import { V1KeysVerifyKeyRequest, V1KeysVerifyKeyResponse } from "@/routes/v1_keys_verifyKey"; import { expect, test } from "vitest"; test("create, verify and delete a key", async () => { const h = await IntegrationHarness.init(); const { key: rootKey } = await h.createRootKey(["*"]); const createApiResponse = await h.post({ url: `${h.baseUrl}/v1/apis.createApi`, headers: { "Content-Type": "application/json", Authorization: `Bearer ${rootKey}`, }, body: { name: "scenario-test-pls-delete", }, }); expect(createApiResponse.status).toEqual(200); expect(createApiResponse.body.apiId).toBeDefined(); expect(createApiResponse.headers).toHaveProperty("unkey-request-id"); const key = await h.post({ url: `${h.baseUrl}/v1/keys.createKey`, headers: { "Content-Type": "application/json", Authorization: `Bearer ${rootKey}`, }, body: { apiId: createApiResponse.body.apiId, byteLength: 16, enabled: true, }, }); expect(key.status).toEqual(200); expect(key.body.key).toBeDefined(); expect(key.body.keyId).toBeDefined(); const valid = await h.post({ url: `${h.baseUrl}/v1/keys.verifyKey`, headers: { "Content-Type": "application/json", }, body: { key: key.body.key, apiId: createApiResponse.body.apiId, }, }); expect(valid.status).toEqual(200); expect(valid.body.valid).toEqual(true); const revoked = await h.post({ url: `${h.baseUrl}/v1/keys.deleteKey`, headers: { "Content-Type": "application/json", Authorization: `Bearer ${rootKey}`, }, body: { keyId: key.body.keyId, }, }); expect(revoked.status).toEqual(200); const validAfterRevoke = await h.post({ url: `${h.baseUrl}/v1/keys.verifyKey`, headers: { "Content-Type": "application/json", }, body: { key: key.body.key, apiId: createApiResponse.body.apiId, }, }); expect(validAfterRevoke.status).toEqual(200); expect(validAfterRevoke.body.valid).toEqual(false); });