1import * as AWS from "@/AWS";
2import * as Provider from "@/Provider";
3import * as Test from "./Test.ts";
4import { expect } from "alchemy-test";
5import * as Effect from "effect/Effect";
6import * as Redacted from "effect/Redacted";
7import { assertApiKeyDeleted } from "./assertions.ts";
8
9const { test } = Test.make({ providers: AWS.providers() });
10
11test.provider.skipIf(!!process.env.FAST)(
12 "create and delete API key",
13 (stack) =>
14 Effect.gen(function* () {
15 yield* stack.destroy();
16
17 const key = yield* stack.deploy(
18 Effect.gen(function* () {
19 return yield* AWS.ApiGateway.ApiKey("AgApiKey", {
20 generateDistinctId: true,
21 enabled: true,
22 });
23 }),
24 );
25
26 expect(key.id).toBeDefined();
27
28 yield* stack.destroy();
29 yield* assertApiKeyDeleted(key.id);
30 }),
31 { tags: ["provider:aws", "provider:aws:apigateway", "live"] },
32);
33
34test.provider.skipIf(!!process.env.FAST)(
35 "custom API key value is not returned in outputs",
36 (stack) =>
37 Effect.gen(function* () {
38 yield* stack.destroy();
39
40 const key = yield* stack.deploy(
41 Effect.gen(function* () {
42 return yield* AWS.ApiGateway.ApiKey("AgApiKeySecret", {
43 value: Redacted.make("alchemy-test-secret-value-abc123"),
44 });
45 }),
46 );
47
48 expect(key.id).toBeDefined();
49 expect(Object.keys(key as Record<string, unknown>)).not.toContain(
50 "value",
51 );
52
53 yield* stack.destroy();
54 yield* assertApiKeyDeleted(key.id);
55 }),
56 { tags: ["provider:aws", "provider:aws:apigateway", "live"] },
57);
58
59test.provider.skipIf(!!process.env.FAST)(
60 "list enumerates the deployed API key",
61 (stack) =>
62 Effect.gen(function* () {
63 yield* stack.destroy();
64
65 const key = yield* stack.deploy(
66 Effect.gen(function* () {
67 return yield* AWS.ApiGateway.ApiKey("AgApiKeyList", {
68 generateDistinctId: true,
69 enabled: true,
70 });
71 }),
72 );
73
74 const provider = yield* Provider.findProvider(AWS.ApiGateway.ApiKey);
75 const all = yield* provider.list();
76
77 expect(all.some((k) => k.id === key.id)).toBe(true);
78
79 yield* stack.destroy();
80 yield* assertApiKeyDeleted(key.id);
81 }),
82 { tags: ["provider:aws", "provider:aws:apigateway", "live"] },
83);