agent-ecosystem/test/main/services/runtime/openCodeRuntimeBinaryEnv.test.ts
2026-05-18 03:36:26 +03:00

65 lines
2.5 KiB
TypeScript

import path from 'node:path';
import { describe, expect, it } from 'vitest';
import { applyOpenCodeRuntimeBinaryEnv } from '../../../../src/main/services/runtime/openCodeRuntimeBinaryEnv';
describe('applyOpenCodeRuntimeBinaryEnv', () => {
it('sets the OpenCode binary env var and prepends its directory to PATH', () => {
const binaryPath = path.join(process.cwd(), 'mock app data', 'opencode', 'opencode');
const env: NodeJS.ProcessEnv = {
PATH: ['/usr/bin', '/bin'].join(path.delimiter),
};
applyOpenCodeRuntimeBinaryEnv(env, binaryPath);
expect(env.CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH).toBe(binaryPath);
expect(env.OPENCODE_BIN_PATH).toBe(binaryPath);
expect(env.PATH?.split(path.delimiter)).toEqual([
path.dirname(binaryPath),
'/usr/bin',
'/bin',
]);
});
it('keeps an explicit OpenCode binary override but still exposes it on PATH', () => {
const explicitBinaryPath = path.join(process.cwd(), 'custom opencode', 'opencode');
const discoveredBinaryPath = path.join(process.cwd(), 'managed opencode', 'opencode');
const env: NodeJS.ProcessEnv = {
CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH: explicitBinaryPath,
PATH: '/usr/bin',
};
applyOpenCodeRuntimeBinaryEnv(env, discoveredBinaryPath);
expect(env.CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH).toBe(explicitBinaryPath);
expect(env.OPENCODE_BIN_PATH).toBe(explicitBinaryPath);
expect(env.PATH?.split(path.delimiter)[0]).toBe(path.dirname(explicitBinaryPath));
});
it('mirrors a legacy OpenCode binary override into the managed env var', () => {
const explicitBinaryPath = path.join(process.cwd(), 'legacy opencode', 'opencode');
const env: NodeJS.ProcessEnv = {
OPENCODE_BIN_PATH: explicitBinaryPath,
PATH: '/usr/bin',
};
applyOpenCodeRuntimeBinaryEnv(env, null);
expect(env.CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH).toBe(explicitBinaryPath);
expect(env.OPENCODE_BIN_PATH).toBe(explicitBinaryPath);
expect(env.PATH?.split(path.delimiter)[0]).toBe(path.dirname(explicitBinaryPath));
});
it('does not duplicate the binary directory in PATH on repeated application', () => {
const binaryPath = path.join(process.cwd(), 'mock app data', 'opencode', 'opencode');
const env: NodeJS.ProcessEnv = {
PATH: [path.dirname(binaryPath), '/usr/bin'].join(path.delimiter),
};
applyOpenCodeRuntimeBinaryEnv(env, binaryPath);
applyOpenCodeRuntimeBinaryEnv(env, binaryPath);
expect(env.PATH?.split(path.delimiter)).toEqual([path.dirname(binaryPath), '/usr/bin']);
});
});