65 lines
2.5 KiB
TypeScript
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']);
|
|
});
|
|
});
|