1import type * as firebaserules from "@distilled.cloud/gcp/firebaserules_v1";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { RuntimeContext } from "../../RuntimeContext.ts";
5import type { Ruleset } from "./Ruleset.ts";
6
7export interface TestRulesetRequest extends Omit<
8 firebaserules.TestProjectsRequest,
9 "name"
10> {}
11
12/**
13 * Runtime binding for Firebase Rules `projects.test` against a
14 * {@link Ruleset}.
15 *
16 * Bind this operation to a ruleset in a Function/Action init phase.
17 * Provide {@link TestRulesetHttp}. `source` must be omitted when the
18 * name refers to an existing ruleset.
19 *
20 * ### Testing a Ruleset
21 * **Example:** Run a test suite
22 * ```typescript
23 * const testRuleset = yield* GCP.FirebaseRules.TestRuleset(ruleset);
24 * const result = yield* testRuleset({
25 * body: {
26 * testSuite: {
27 * testCases: [{ expectation: "DENY" }],
28 * },
29 * },
30 * });
31 * ```
32 *
33 * @binding
34 * @category FirebaseRules
35 */
36export interface TestRuleset extends Binding.Service<
37 TestRuleset,
38 "GCP.FirebaseRules.TestRuleset",
39 (
40 ruleset: Ruleset,
41 ) => Effect.Effect<
42 (
43 request?: TestRulesetRequest,
44 ) => Effect.Effect<
45 firebaserules.TestRulesetResponse,
46 firebaserules.TestProjectsError,
47 RuntimeContext
48 >
49 >
50> {}
51
52export const TestRuleset = Binding.Service<TestRuleset>(
53 "GCP.FirebaseRules.TestRuleset",
54);