import { describe, expect, it } from "@effect/vitest";
import { Effect } from "effect";
import type { InvokeOptions } from "@executor-js/sdk";
import { makePluginCtxAppsResolver, type AppsResolverPluginCtx } from "./resolver";
const run = (effect: Effect.Effect): Promise => Effect.runPromise(effect);
describe("makePluginCtxAppsResolver", () => {
it("passes caller invoke options through bridged integration calls", async () => {
const invokeOptions = { onElicitation: "accept-all" } satisfies InvokeOptions;
let seenAddress = "";
let seenPayload: unknown;
let seenOptions: InvokeOptions | undefined;
const ctx: AppsResolverPluginCtx = {
connections: {
list: () => Effect.succeed([]),
get: () => Effect.succeed(null),
},
execute: (address: unknown, payload: unknown, options?: InvokeOptions) =>
Effect.sync(() => {
seenAddress = String(address);
seenPayload = payload;
seenOptions = options;
return "called";
}),
};
const resolver = makePluginCtxAppsResolver({ ctx });
const result = await run(
resolver.call({
integration: "github",
connection: "tools.github.user.main",
path: ["issues", "listForRepo"],
args: [{ owner: "acme", repo: "tools" }],
invokeOptions,
}),
);
expect(result).toBe("called");
expect(seenAddress).toBe("tools.github.user.main.issues.listForRepo");
expect(seenPayload).toEqual({ owner: "acme", repo: "tools" });
expect(seenOptions).toBe(invokeOptions);
});
});