import { describe, expect, it } from "@effect/vitest";import { AuthTemplateSlug } from "@executor-js/sdk/shared"; import { authMethodsFromConfig, graphqlTemplatesFromPlacements } from "./auth-method-config";import { GRAPHQL_APIKEY_TEMPLATE } from "./defaults";import type { AuthTemplate } from "../sdk/types"; describe("graphqlTemplatesFromPlacements", () => { it("maps a single named header placement → one apiKey template (primary slug)", () => { const templates = graphqlTemplatesFromPlacements([ { carrier: "header", name: "Authorization", prefix: "Bearer " }, ]); expect(templates).toEqual([ { kind: "apiKey", slug: GRAPHQL_APIKEY_TEMPLATE, in: "header", name: "Authorization", prefix: "Bearer ", }, ]); }); it("emits one template per named placement; only the first keeps the slug", () => { const templates = graphqlTemplatesFromPlacements( [ { carrier: "header", name: "Authorization", prefix: "" }, { carrier: "query", name: "api_key", prefix: "" }, ], "", ); expect(templates).toEqual([ { kind: "apiKey", slug: "", in: "header", name: "Authorization" }, { kind: "apiKey", slug: "", in: "query", name: "api_key" }, ]); }); it("drops unnamed placements", () => { const templates = graphqlTemplatesFromPlacements([ { carrier: "header", name: "", prefix: "" }, { carrier: "header", name: "X-Token", prefix: "" }, ]); expect(templates).toEqual([ { kind: "apiKey", slug: GRAPHQL_APIKEY_TEMPLATE, in: "header", name: "X-Token" }, ]); });}); describe("authMethodsFromConfig", () => { it("maps a header apiKey template → a generic apikey method with a placement", () => { const config: AuthTemplate[] = [ { kind: "apiKey", slug: "apiKey", in: "header", name: "Authorization", prefix: "Bearer " }, ]; expect(authMethodsFromConfig(config)).toEqual([ { id: "apiKey", label: "API key (Authorization)", kind: "apikey", source: "spec", template: AuthTemplateSlug.make("apiKey"), placements: [{ carrier: "header", name: "Authorization", prefix: "Bearer " }], }, ]); }); it("marks a custom_ slug as a custom method", () => { const config: AuthTemplate[] = [ { kind: "apiKey", slug: "custom_abc", in: "query", name: "token" }, ]; const [method] = authMethodsFromConfig(config); expect(method?.source).toBe("custom"); expect(method?.placements).toEqual([{ carrier: "query", name: "token", prefix: "" }]); }); it("maps an oauth2 template → an oauth method", () => { const config: AuthTemplate[] = [{ kind: "oauth2", slug: "oauth2" }]; expect(authMethodsFromConfig(config)).toEqual([ { id: "oauth2", label: "OAuth2", kind: "oauth", source: "spec", template: AuthTemplateSlug.make("oauth2"), placements: [], oauth: {}, }, ]); });}); describe("round-trip (placements → templates → methods)", () => { it("a header placement survives the round-trip into a generic method", () => { const placements = [{ carrier: "header" as const, name: "X-Api-Key", prefix: "" }]; const templates = graphqlTemplatesFromPlacements(placements, ""); const [method] = authMethodsFromConfig(templates); expect(method?.placements).toEqual(placements); });});
import { describe, expect, it } from "@effect/vitest";
import { AuthTemplateSlug } from "@executor-js/sdk/shared";
import { authMethodsFromConfig, graphqlTemplatesFromPlacements } from "./auth-method-config";
import { GRAPHQL_APIKEY_TEMPLATE } from "./defaults";
import type { AuthTemplate } from "../sdk/types";
describe("graphqlTemplatesFromPlacements", () => {
it("maps a single named header placement → one apiKey template (primary slug)", () => {
const templates = graphqlTemplatesFromPlacements([
{ carrier: "header", name: "Authorization", prefix: "Bearer " },
]);
expect(templates).toEqual([
{
kind: "apiKey",
slug: GRAPHQL_APIKEY_TEMPLATE,
in: "header",
name: "Authorization",
prefix: "Bearer ",
},
]);
});
it("emits one template per named placement; only the first keeps the slug", () => {
const templates = graphqlTemplatesFromPlacements(
[
{ carrier: "header", name: "Authorization", prefix: "" },
{ carrier: "query", name: "api_key", prefix: "" },
],
"",
);
expect(templates).toEqual([
{ kind: "apiKey", slug: "", in: "header", name: "Authorization" },
{ kind: "apiKey", slug: "", in: "query", name: "api_key" },
]);
});
it("drops unnamed placements", () => {
const templates = graphqlTemplatesFromPlacements([
{ carrier: "header", name: "", prefix: "" },
{ carrier: "header", name: "X-Token", prefix: "" },
]);
expect(templates).toEqual([
{ kind: "apiKey", slug: GRAPHQL_APIKEY_TEMPLATE, in: "header", name: "X-Token" },
]);
});
});
describe("authMethodsFromConfig", () => {
it("maps a header apiKey template → a generic apikey method with a placement", () => {
const config: AuthTemplate[] = [
{ kind: "apiKey", slug: "apiKey", in: "header", name: "Authorization", prefix: "Bearer " },
];
expect(authMethodsFromConfig(config)).toEqual([
{
id: "apiKey",
label: "API key (Authorization)",
kind: "apikey",
source: "spec",
template: AuthTemplateSlug.make("apiKey"),
placements: [{ carrier: "header", name: "Authorization", prefix: "Bearer " }],
},
]);
});
it("marks a custom_ slug as a custom method", () => {
const config: AuthTemplate[] = [
{ kind: "apiKey", slug: "custom_abc", in: "query", name: "token" },
];
const [method] = authMethodsFromConfig(config);
expect(method?.source).toBe("custom");
expect(method?.placements).toEqual([{ carrier: "query", name: "token", prefix: "" }]);
});
it("maps an oauth2 template → an oauth method", () => {
const config: AuthTemplate[] = [{ kind: "oauth2", slug: "oauth2" }];
expect(authMethodsFromConfig(config)).toEqual([
{
id: "oauth2",
label: "OAuth2",
kind: "oauth",
source: "spec",
template: AuthTemplateSlug.make("oauth2"),
placements: [],
oauth: {},
},
]);
});
});
describe("round-trip (placements → templates → methods)", () => {
it("a header placement survives the round-trip into a generic method", () => {
const placements = [{ carrier: "header" as const, name: "X-Api-Key", prefix: "" }];
const templates = graphqlTemplatesFromPlacements(placements, "");
const [method] = authMethodsFromConfig(templates);
expect(method?.placements).toEqual(placements);
});
});