import { describe, expect, it } from "@effect/vitest";import { AuthTemplateSlug, ConnectionAddress, ConnectionName, IntegrationSlug, ProviderKey, type Connection, type Owner,} from "@executor-js/sdk/shared"; import { shouldRenderConnectionPicker, toolProxyAddress } from "./tool-run-panel"; const connection = (input: { readonly owner: Owner; readonly name: string }): Connection => ({ owner: input.owner, name: ConnectionName.make(input.name), integration: IntegrationSlug.make("vercel"), template: AuthTemplateSlug.make("default"), provider: ProviderKey.make("default"), address: ConnectionAddress.make(`tools.vercel.${input.owner}.${input.name}`), identityLabel: null, expiresAt: null,}); describe("shouldRenderConnectionPicker", () => { it("hides the picker when there is only one connection", () => { expect(shouldRenderConnectionPicker([connection({ owner: "org", name: "published" })])).toBe( false, ); }); it("keeps the picker when there are multiple connections", () => { expect( shouldRenderConnectionPicker([ connection({ owner: "org", name: "prod" }), connection({ owner: "user", name: "scratch" }), ]), ).toBe(true); });}); describe("toolProxyAddress", () => { it("builds the address under the SELECTED connection's own owner — user", () => { expect( toolProxyAddress({ integration: IntegrationSlug.make("vercel"), connection: connection({ owner: "user", name: "scratch" }), toolName: "deploy", }), ).toBe("vercel.user.scratch.deploy"); }); it("builds the address under the SELECTED connection's own owner — org", () => { expect( toolProxyAddress({ integration: IntegrationSlug.make("vercel"), connection: connection({ owner: "org", name: "prod" }), toolName: "deploy", }), ).toBe("vercel.org.prod.deploy"); }); it("keeps a dotted tool name intact (never split on dots)", () => { expect( toolProxyAddress({ integration: IntegrationSlug.make("vercel"), connection: connection({ owner: "org", name: "prod" }), toolName: "aliases.deleteAlias", }), ).toBe("vercel.org.prod.aliases.deleteAlias"); }); it("addresses two connections of different owners independently (merged list)", () => { const integration = IntegrationSlug.make("vercel"); const orgAddr = toolProxyAddress({ integration, connection: connection({ owner: "org", name: "prod" }), toolName: "deploy", }); const userAddr = toolProxyAddress({ integration, connection: connection({ owner: "user", name: "scratch" }), toolName: "deploy", }); // Same tool, two accounts — each addressed under its OWN owner, never an // ambient one. expect(orgAddr).toBe("vercel.org.prod.deploy"); expect(userAddr).toBe("vercel.user.scratch.deploy"); });});
import { describe, expect, it } from "@effect/vitest";
import {
AuthTemplateSlug,
ConnectionAddress,
ConnectionName,
IntegrationSlug,
ProviderKey,
type Connection,
type Owner,
} from "@executor-js/sdk/shared";
import { shouldRenderConnectionPicker, toolProxyAddress } from "./tool-run-panel";
const connection = (input: { readonly owner: Owner; readonly name: string }): Connection => ({
owner: input.owner,
name: ConnectionName.make(input.name),
integration: IntegrationSlug.make("vercel"),
template: AuthTemplateSlug.make("default"),
provider: ProviderKey.make("default"),
address: ConnectionAddress.make(`tools.vercel.${input.owner}.${input.name}`),
identityLabel: null,
expiresAt: null,
});
describe("shouldRenderConnectionPicker", () => {
it("hides the picker when there is only one connection", () => {
expect(shouldRenderConnectionPicker([connection({ owner: "org", name: "published" })])).toBe(
false,
);
});
it("keeps the picker when there are multiple connections", () => {
expect(
shouldRenderConnectionPicker([
connection({ owner: "org", name: "prod" }),
connection({ owner: "user", name: "scratch" }),
]),
).toBe(true);
});
});
describe("toolProxyAddress", () => {
it("builds the address under the SELECTED connection's own owner — user", () => {
expect(
toolProxyAddress({
integration: IntegrationSlug.make("vercel"),
connection: connection({ owner: "user", name: "scratch" }),
toolName: "deploy",
}),
).toBe("vercel.user.scratch.deploy");
});
it("builds the address under the SELECTED connection's own owner — org", () => {
expect(
toolProxyAddress({
integration: IntegrationSlug.make("vercel"),
connection: connection({ owner: "org", name: "prod" }),
toolName: "deploy",
}),
).toBe("vercel.org.prod.deploy");
});
it("keeps a dotted tool name intact (never split on dots)", () => {
expect(
toolProxyAddress({
integration: IntegrationSlug.make("vercel"),
connection: connection({ owner: "org", name: "prod" }),
toolName: "aliases.deleteAlias",
}),
).toBe("vercel.org.prod.aliases.deleteAlias");
});
it("addresses two connections of different owners independently (merged list)", () => {
const integration = IntegrationSlug.make("vercel");
const orgAddr = toolProxyAddress({
integration,
connection: connection({ owner: "org", name: "prod" }),
toolName: "deploy",
});
const userAddr = toolProxyAddress({
integration,
connection: connection({ owner: "user", name: "scratch" }),
toolName: "deploy",
});
// Same tool, two accounts — each addressed under its OWN owner, never an
// ambient one.
expect(orgAddr).toBe("vercel.org.prod.deploy");
expect(userAddr).toBe("vercel.user.scratch.deploy");
});
});