import { describe, expect, it } from "@effect/vitest";import { AuthTemplateSlug } from "@executor-js/sdk/shared";import type { AuthTemplateEditorValue } from "@executor-js/react/components/auth-template-editor"; import { authenticationFromEditorValue, editorValueFromAuthentication, templateFromPlacements,} from "./auth-method-config";import { TOKEN_VARIABLE, variable, type Authentication } from "../sdk/types"; describe("editorValueFromAuthentication", () => { it("maps a bearer apiKey header template → an apikey editor value with prefix", () => { const template: Authentication = { slug: AuthTemplateSlug.make("apikey-0"), type: "apiKey", headers: { Authorization: ["Bearer ", variable(TOKEN_VARIABLE)] }, }; expect(editorValueFromAuthentication(template)).toEqual({ kind: "apikey", placements: [ { carrier: "header", name: "Authorization", prefix: "Bearer ", variable: "token" }, ], }); }); it("maps a query apiKey template → an apikey editor value (empty prefix)", () => { const template: Authentication = { slug: AuthTemplateSlug.make("apikey-1"), type: "apiKey", queryParams: { api_key: [variable(TOKEN_VARIABLE)] }, }; expect(editorValueFromAuthentication(template)).toEqual({ kind: "apikey", placements: [{ carrier: "query", name: "api_key", prefix: "", variable: "token" }], }); }); it("maps an oauth template → an oauth editor value carrying endpoints + scopes", () => { const template: Authentication = { slug: AuthTemplateSlug.make("oauth-google"), type: "oauth", authorizationUrl: "https://accounts.example.com/o/oauth2/auth", tokenUrl: "https://oauth2.example.com/token", scopes: ["openid", "email"], }; expect(editorValueFromAuthentication(template)).toEqual({ kind: "oauth", authorizationUrl: "https://accounts.example.com/o/oauth2/auth", tokenUrl: "https://oauth2.example.com/token", scopes: ["openid", "email"], }); });}); describe("authenticationFromEditorValue", () => { it("returns null for a 'none' value (nothing to register)", () => { expect(authenticationFromEditorValue({ kind: "none" })).toBeNull(); }); it("builds an apiKey template from placements, stamping the slug", () => { const value: AuthTemplateEditorValue = { kind: "apikey", placements: [{ carrier: "header", name: "X-Token", prefix: "" }], }; expect(authenticationFromEditorValue(value, "custom_x")).toEqual( templateFromPlacements(value.placements, "custom_x"), ); }); it("builds an oauth template from an oauth value", () => { const value: AuthTemplateEditorValue = { kind: "oauth", authorizationUrl: "https://a.example.com/auth", tokenUrl: "https://a.example.com/token", scopes: ["read"], }; expect(authenticationFromEditorValue(value, "oauth-0")).toEqual({ slug: AuthTemplateSlug.make("oauth-0"), type: "oauth", authorizationUrl: "https://a.example.com/auth", tokenUrl: "https://a.example.com/token", scopes: ["read"], }); });}); describe("round-trip (apiKey + oauth)", () => { it("apiKey: editorValue ∘ authentication is identity for the placement shape", () => { const template: Authentication = { slug: AuthTemplateSlug.make("apikey-0"), type: "apiKey", headers: { Authorization: ["Bearer ", variable(TOKEN_VARIABLE)] }, }; const value = editorValueFromAuthentication(template); const back = authenticationFromEditorValue(value, "apikey-0"); expect(back).toEqual(template); }); it("oauth: editorValue ∘ authentication preserves endpoints + scopes", () => { const template: Authentication = { slug: AuthTemplateSlug.make("oauth-x"), type: "oauth", authorizationUrl: "https://a.example.com/auth", tokenUrl: "https://a.example.com/token", scopes: ["read", "write"], }; const back = authenticationFromEditorValue(editorValueFromAuthentication(template), "oauth-x"); expect(back).toEqual(template); });});
import { describe, expect, it } from "@effect/vitest";
import { AuthTemplateSlug } from "@executor-js/sdk/shared";
import type { AuthTemplateEditorValue } from "@executor-js/react/components/auth-template-editor";
import {
authenticationFromEditorValue,
editorValueFromAuthentication,
templateFromPlacements,
} from "./auth-method-config";
import { TOKEN_VARIABLE, variable, type Authentication } from "../sdk/types";
describe("editorValueFromAuthentication", () => {
it("maps a bearer apiKey header template → an apikey editor value with prefix", () => {
const template: Authentication = {
slug: AuthTemplateSlug.make("apikey-0"),
type: "apiKey",
headers: { Authorization: ["Bearer ", variable(TOKEN_VARIABLE)] },
};
expect(editorValueFromAuthentication(template)).toEqual({
kind: "apikey",
placements: [
{ carrier: "header", name: "Authorization", prefix: "Bearer ", variable: "token" },
],
});
});
it("maps a query apiKey template → an apikey editor value (empty prefix)", () => {
const template: Authentication = {
slug: AuthTemplateSlug.make("apikey-1"),
type: "apiKey",
queryParams: { api_key: [variable(TOKEN_VARIABLE)] },
};
expect(editorValueFromAuthentication(template)).toEqual({
kind: "apikey",
placements: [{ carrier: "query", name: "api_key", prefix: "", variable: "token" }],
});
});
it("maps an oauth template → an oauth editor value carrying endpoints + scopes", () => {
const template: Authentication = {
slug: AuthTemplateSlug.make("oauth-google"),
type: "oauth",
authorizationUrl: "https://accounts.example.com/o/oauth2/auth",
tokenUrl: "https://oauth2.example.com/token",
scopes: ["openid", "email"],
};
expect(editorValueFromAuthentication(template)).toEqual({
kind: "oauth",
authorizationUrl: "https://accounts.example.com/o/oauth2/auth",
tokenUrl: "https://oauth2.example.com/token",
scopes: ["openid", "email"],
});
});
});
describe("authenticationFromEditorValue", () => {
it("returns null for a 'none' value (nothing to register)", () => {
expect(authenticationFromEditorValue({ kind: "none" })).toBeNull();
});
it("builds an apiKey template from placements, stamping the slug", () => {
const value: AuthTemplateEditorValue = {
kind: "apikey",
placements: [{ carrier: "header", name: "X-Token", prefix: "" }],
};
expect(authenticationFromEditorValue(value, "custom_x")).toEqual(
templateFromPlacements(value.placements, "custom_x"),
);
});
it("builds an oauth template from an oauth value", () => {
const value: AuthTemplateEditorValue = {
kind: "oauth",
authorizationUrl: "https://a.example.com/auth",
tokenUrl: "https://a.example.com/token",
scopes: ["read"],
};
expect(authenticationFromEditorValue(value, "oauth-0")).toEqual({
slug: AuthTemplateSlug.make("oauth-0"),
type: "oauth",
authorizationUrl: "https://a.example.com/auth",
tokenUrl: "https://a.example.com/token",
scopes: ["read"],
});
});
});
describe("round-trip (apiKey + oauth)", () => {
it("apiKey: editorValue ∘ authentication is identity for the placement shape", () => {
const template: Authentication = {
slug: AuthTemplateSlug.make("apikey-0"),
type: "apiKey",
headers: { Authorization: ["Bearer ", variable(TOKEN_VARIABLE)] },
};
const value = editorValueFromAuthentication(template);
const back = authenticationFromEditorValue(value, "apikey-0");
expect(back).toEqual(template);
});
it("oauth: editorValue ∘ authentication preserves endpoints + scopes", () => {
const template: Authentication = {
slug: AuthTemplateSlug.make("oauth-x"),
type: "oauth",
authorizationUrl: "https://a.example.com/auth",
tokenUrl: "https://a.example.com/token",
scopes: ["read", "write"],
};
const back = authenticationFromEditorValue(editorValueFromAuthentication(template), "oauth-x");
expect(back).toEqual(template);
});
});