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 { assertApiKeyDeleted, assertUsagePlanDeleted } from "./assertions.ts";
7
8const { test } = Test.make({ providers: AWS.providers() });
9
10test.provider.skipIf(!!process.env.FAST)(
11 "create and delete usage plan key association",
12 (stack) =>
13 Effect.gen(function* () {
14 yield* stack.destroy();
15
16 const { key, plan } = yield* stack.deploy(
17 Effect.gen(function* () {
18 const key = yield* AWS.ApiGateway.ApiKey("AgUpkKey", {
19 generateDistinctId: true,
20 });
21 const plan = yield* AWS.ApiGateway.UsagePlan("AgUpkPlan", {});
22 yield* AWS.ApiGateway.UsagePlanKey("AgUpkLink", {
23 usagePlanId: plan.id,
24 keyId: key.id,
25 });
26 return { key, plan };
27 }),
28 );
29
30 expect(key.id).toBeDefined();
31 expect(plan.id).toBeDefined();
32
33 yield* stack.destroy();
34 yield* assertApiKeyDeleted(key.id);
35 yield* assertUsagePlanDeleted(plan.id);
36 }),
37 { tags: ["provider:aws", "provider:aws:apigateway", "live"] },
38);
39
40test.provider.skipIf(!!process.env.FAST)(
41 "list enumerates the deployed usage plan key",
42 (stack) =>
43 Effect.gen(function* () {
44 yield* stack.destroy();
45
46 const { key, plan } = yield* stack.deploy(
47 Effect.gen(function* () {
48 const key = yield* AWS.ApiGateway.ApiKey("AgUpkListKey", {
49 generateDistinctId: true,
50 });
51 const plan = yield* AWS.ApiGateway.UsagePlan("AgUpkListPlan", {});
52 yield* AWS.ApiGateway.UsagePlanKey("AgUpkListLink", {
53 usagePlanId: plan.id,
54 keyId: key.id,
55 });
56 return { key, plan };
57 }),
58 );
59
60 const provider = yield* Provider.findProvider(
61 AWS.ApiGateway.UsagePlanKey,
62 );
63 const all = yield* provider.list();
64
65 expect(
66 all.some((x) => x.usagePlanId === plan.id && x.keyId === key.id),
67 ).toBe(true);
68
69 yield* stack.destroy();
70 yield* assertApiKeyDeleted(key.id);
71 yield* assertUsagePlanDeleted(plan.id);
72 }),
73 { tags: ["provider:aws", "provider:aws:apigateway", "live"] },
74);