import { describe, expect, it } from "@effect/vitest";import { Effect } from "effect"; import { GOOGLE_OAUTH_REVIEW_FLAG, makeGoogleOAuthListing } from "./google-oauth-listing"; const context = { userId: "review-user", organizationId: "review-org" }; describe("Google OAuth review listing", () => { it.effect("targets the authenticated user and re-evaluates after revocation", () => Effect.gen(function* () { let enabled = true; const policy = makeGoogleOAuthListing({ projectKey: "public-project-key", host: "https://flags.example.com", fetch: async (url, init) => { expect(url).toBe("https://flags.example.com/flags?v=2"); expect(await new Response(String(init?.body)).json()).toMatchObject({ distinct_id: context.userId, person_properties: { executor_user_id: context.userId }, flag_keys_to_evaluate: [GOOGLE_OAUTH_REVIEW_FLAG], }); expect(init?.signal).toBeInstanceOf(AbortSignal); return Response.json({ flags: { [GOOGLE_OAUTH_REVIEW_FLAG]: { enabled } } }); }, }); expect(yield* policy(context)).toBe(true); enabled = false; expect(yield* policy(context)).toBe(false); }), ); for (const body of [ { flags: {} }, { flags: { [GOOGLE_OAUTH_REVIEW_FLAG]: { enabled: "true" } } }, {}, ]) { it.effect(`withholds an absent or invalid flag: ${JSON.stringify(body)}`, () => Effect.gen(function* () { const policy = makeGoogleOAuthListing({ projectKey: "key", host: "https://flags.example.com", fetch: async () => Response.json(body), }); expect(yield* policy(context)).toBe(false); }), ); } it.effect("withholds on HTTP and transport failures", () => Effect.gen(function* () { const unavailable = makeGoogleOAuthListing({ projectKey: "key", host: "https://flags.example.com", fetch: async () => new Response(null, { status: 503 }), }); const failed = makeGoogleOAuthListing({ projectKey: "key", host: "https://flags.example.com", fetch: () => Effect.runPromise(Effect.fail(new DOMException("Network unavailable", "NetworkError"))), }); expect(yield* unavailable(context)).toBe(false); expect(yield* failed(context)).toBe(false); }), ); it.effect("does not evaluate without a user or project key", () => Effect.gen(function* () { let requests = 0; const fetch: typeof globalThis.fetch = async () => { requests += 1; return Response.json({ flags: {} }); }; const configured = makeGoogleOAuthListing({ projectKey: "key", host: "https://flags.example.com", fetch, }); const unconfigured = makeGoogleOAuthListing({ projectKey: undefined, host: "https://flags.example.com", fetch, }); expect(yield* configured({ ...context, userId: null })).toBe(false); expect(yield* unconfigured(context)).toBe(false); expect(requests).toBe(0); }), );});
import { describe, expect, it } from "@effect/vitest";
import { Effect } from "effect";
import { GOOGLE_OAUTH_REVIEW_FLAG, makeGoogleOAuthListing } from "./google-oauth-listing";
const context = { userId: "review-user", organizationId: "review-org" };
describe("Google OAuth review listing", () => {
it.effect("targets the authenticated user and re-evaluates after revocation", () =>
Effect.gen(function* () {
let enabled = true;
const policy = makeGoogleOAuthListing({
projectKey: "public-project-key",
host: "https://flags.example.com",
fetch: async (url, init) => {
expect(url).toBe("https://flags.example.com/flags?v=2");
expect(await new Response(String(init?.body)).json()).toMatchObject({
distinct_id: context.userId,
person_properties: { executor_user_id: context.userId },
flag_keys_to_evaluate: [GOOGLE_OAUTH_REVIEW_FLAG],
});
expect(init?.signal).toBeInstanceOf(AbortSignal);
return Response.json({ flags: { [GOOGLE_OAUTH_REVIEW_FLAG]: { enabled } } });
},
});
expect(yield* policy(context)).toBe(true);
enabled = false;
expect(yield* policy(context)).toBe(false);
}),
);
for (const body of [
{ flags: {} },
{ flags: { [GOOGLE_OAUTH_REVIEW_FLAG]: { enabled: "true" } } },
{},
]) {
it.effect(`withholds an absent or invalid flag: ${JSON.stringify(body)}`, () =>
Effect.gen(function* () {
const policy = makeGoogleOAuthListing({
projectKey: "key",
host: "https://flags.example.com",
fetch: async () => Response.json(body),
});
expect(yield* policy(context)).toBe(false);
}),
);
}
it.effect("withholds on HTTP and transport failures", () =>
Effect.gen(function* () {
const unavailable = makeGoogleOAuthListing({
projectKey: "key",
host: "https://flags.example.com",
fetch: async () => new Response(null, { status: 503 }),
});
const failed = makeGoogleOAuthListing({
projectKey: "key",
host: "https://flags.example.com",
fetch: () =>
Effect.runPromise(Effect.fail(new DOMException("Network unavailable", "NetworkError"))),
});
expect(yield* unavailable(context)).toBe(false);
expect(yield* failed(context)).toBe(false);
}),
);
it.effect("does not evaluate without a user or project key", () =>
Effect.gen(function* () {
let requests = 0;
const fetch: typeof globalThis.fetch = async () => {
requests += 1;
return Response.json({ flags: {} });
};
const configured = makeGoogleOAuthListing({
projectKey: "key",
host: "https://flags.example.com",
fetch,
});
const unconfigured = makeGoogleOAuthListing({
projectKey: undefined,
host: "https://flags.example.com",
fetch,
});
expect(yield* configured({ ...context, userId: null })).toBe(false);
expect(yield* unconfigured(context)).toBe(false);
expect(requests).toBe(0);
}),
);
});