import { afterEach, describe, expect, it } from "@effect/vitest";import { BunServices } from "@effect/platform-bun";import { mkdtempSync, rmSync } from "node:fs";import { tmpdir } from "node:os";import { join } from "node:path";import * as Effect from "effect/Effect"; import { defaultCliServerConnectionProfile, parseCliServerConnectionStore, readCliServerConnectionStore, removeCliServerConnectionProfile, setDefaultCliServerConnectionProfile, upsertCliServerConnectionProfile,} from "./server-profile"; const previousDataDir = process.env.EXECUTOR_DATA_DIR; afterEach(() => { if (previousDataDir === undefined) { delete process.env.EXECUTOR_DATA_DIR; } else { process.env.EXECUTOR_DATA_DIR = previousDataDir; }}); describe("CLI server connection profiles", () => { it("round-trips named server connections and default selection", () => Effect.gen(function* () { const dataDir = mkdtempSync(join(tmpdir(), "executor-server-profiles-")); process.env.EXECUTOR_DATA_DIR = dataDir; try { yield* upsertCliServerConnectionProfile({ name: "remote", connection: { origin: "https://executor.example/api", auth: { kind: "bearer", token: "key_123" }, headers: { "CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" }, }, }, makeDefault: true, }); const store = yield* readCliServerConnectionStore(); expect(store.defaultProfile).toBe("remote"); expect(store.profiles).toHaveLength(1); expect(store.profiles[0]?.connection.kind).toBe("http"); expect(store.profiles[0]?.connection.origin).toBe("https://executor.example"); expect(store.profiles[0]?.connection.apiBaseUrl).toBe("https://executor.example/api"); expect(store.profiles[0]?.connection.auth).toEqual({ kind: "bearer", token: "key_123", }); expect(store.profiles[0]?.connection.headers).toEqual({ "CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" }, }); expect(defaultCliServerConnectionProfile(store)?.name).toBe("remote"); } finally { rmSync(dataDir, { recursive: true, force: true }); } }).pipe(Effect.provide(BunServices.layer))); it("switches and removes the default profile", () => Effect.gen(function* () { const dataDir = mkdtempSync(join(tmpdir(), "executor-server-profiles-")); process.env.EXECUTOR_DATA_DIR = dataDir; try { yield* upsertCliServerConnectionProfile({ name: "local", connection: { origin: "localhost:4788" }, makeDefault: true, }); yield* upsertCliServerConnectionProfile({ name: "remote", connection: { origin: "https://executor.example" }, makeDefault: false, }); const switched = yield* setDefaultCliServerConnectionProfile("remote"); expect(switched.defaultProfile).toBe("remote"); const removed = yield* removeCliServerConnectionProfile("remote"); expect(removed.defaultProfile).toBeNull(); expect(removed.profiles.map((profile) => profile.name)).toEqual(["local"]); } finally { rmSync(dataDir, { recursive: true, force: true }); } }).pipe(Effect.provide(BunServices.layer))); it("drops malformed profiles when parsing", () => { const store = parseCliServerConnectionStore( JSON.stringify({ version: 1, defaultProfile: "missing", profiles: [ { name: "valid", connection: { origin: "https://executor.example" } }, { name: "bad space", connection: { origin: "https://ignored.example" } }, { name: "no-origin", connection: {} }, ], }), ); expect(store.defaultProfile).toBeNull(); expect(store.profiles.map((profile) => profile.name)).toEqual(["valid"]); }); it("preserves desktop sidecar profile kind", () => { const store = parseCliServerConnectionStore( JSON.stringify({ version: 1, defaultProfile: "desktop", profiles: [ { name: "desktop", connection: { kind: "desktop-sidecar", key: "desktop-sidecar", origin: "http://127.0.0.1:4789", auth: { kind: "basic", username: "executor", password: "secret" }, headers: { "CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID", }, }, }, }, ], }), ); expect(store.defaultProfile).toBe("desktop"); expect(store.profiles[0]?.connection.kind).toBe("desktop-sidecar"); expect(store.profiles[0]?.connection.auth).toEqual({ kind: "basic", username: "executor", password: "secret", }); expect(store.profiles[0]?.connection.headers).toEqual({ "CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" }, }); });});
import { afterEach, describe, expect, it } from "@effect/vitest";
import { BunServices } from "@effect/platform-bun";
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import * as Effect from "effect/Effect";
import {
defaultCliServerConnectionProfile,
parseCliServerConnectionStore,
readCliServerConnectionStore,
removeCliServerConnectionProfile,
setDefaultCliServerConnectionProfile,
upsertCliServerConnectionProfile,
} from "./server-profile";
const previousDataDir = process.env.EXECUTOR_DATA_DIR;
afterEach(() => {
if (previousDataDir === undefined) {
delete process.env.EXECUTOR_DATA_DIR;
} else {
process.env.EXECUTOR_DATA_DIR = previousDataDir;
}
});
describe("CLI server connection profiles", () => {
it("round-trips named server connections and default selection", () =>
Effect.gen(function* () {
const dataDir = mkdtempSync(join(tmpdir(), "executor-server-profiles-"));
process.env.EXECUTOR_DATA_DIR = dataDir;
try {
yield* upsertCliServerConnectionProfile({
name: "remote",
connection: {
origin: "https://executor.example/api",
auth: { kind: "bearer", token: "key_123" },
headers: {
"CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" },
},
},
makeDefault: true,
});
const store = yield* readCliServerConnectionStore();
expect(store.defaultProfile).toBe("remote");
expect(store.profiles).toHaveLength(1);
expect(store.profiles[0]?.connection.kind).toBe("http");
expect(store.profiles[0]?.connection.origin).toBe("https://executor.example");
expect(store.profiles[0]?.connection.apiBaseUrl).toBe("https://executor.example/api");
expect(store.profiles[0]?.connection.auth).toEqual({
kind: "bearer",
token: "key_123",
});
expect(store.profiles[0]?.connection.headers).toEqual({
"CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" },
});
expect(defaultCliServerConnectionProfile(store)?.name).toBe("remote");
} finally {
rmSync(dataDir, { recursive: true, force: true });
}
}).pipe(Effect.provide(BunServices.layer)));
it("switches and removes the default profile", () =>
Effect.gen(function* () {
const dataDir = mkdtempSync(join(tmpdir(), "executor-server-profiles-"));
process.env.EXECUTOR_DATA_DIR = dataDir;
try {
yield* upsertCliServerConnectionProfile({
name: "local",
connection: { origin: "localhost:4788" },
makeDefault: true,
});
yield* upsertCliServerConnectionProfile({
name: "remote",
connection: { origin: "https://executor.example" },
makeDefault: false,
});
const switched = yield* setDefaultCliServerConnectionProfile("remote");
expect(switched.defaultProfile).toBe("remote");
const removed = yield* removeCliServerConnectionProfile("remote");
expect(removed.defaultProfile).toBeNull();
expect(removed.profiles.map((profile) => profile.name)).toEqual(["local"]);
} finally {
rmSync(dataDir, { recursive: true, force: true });
}
}).pipe(Effect.provide(BunServices.layer)));
it("drops malformed profiles when parsing", () => {
const store = parseCliServerConnectionStore(
JSON.stringify({
version: 1,
defaultProfile: "missing",
profiles: [
{ name: "valid", connection: { origin: "https://executor.example" } },
{ name: "bad space", connection: { origin: "https://ignored.example" } },
{ name: "no-origin", connection: {} },
],
}),
);
expect(store.defaultProfile).toBeNull();
expect(store.profiles.map((profile) => profile.name)).toEqual(["valid"]);
});
it("preserves desktop sidecar profile kind", () => {
const store = parseCliServerConnectionStore(
JSON.stringify({
version: 1,
defaultProfile: "desktop",
profiles: [
{
name: "desktop",
connection: {
kind: "desktop-sidecar",
key: "desktop-sidecar",
origin: "http://127.0.0.1:4789",
auth: { kind: "basic", username: "executor", password: "secret" },
headers: {
"CF-Access-Client-Id": {
kind: "env",
name: "EXECUTOR_CF_ACCESS_CLIENT_ID",
},
},
},
},
],
}),
);
expect(store.defaultProfile).toBe("desktop");
expect(store.profiles[0]?.connection.kind).toBe("desktop-sidecar");
expect(store.profiles[0]?.connection.auth).toEqual({
kind: "basic",
username: "executor",
password: "secret",
});
expect(store.profiles[0]?.connection.headers).toEqual({
"CF-Access-Client-Id": { kind: "env", name: "EXECUTOR_CF_ACCESS_CLIENT_ID" },
});
});
});