Files
openchamber/packages/web/server/lib/opencode/upgrade-capability.test.js
T
𝖎𝖚𝖑𝖎𝖎𝖆andBohdan Triapitsyn c88dd16d2a fix: prevent bundled OpenCode self-upgrades (#2525)
* fix: prevent bundled OpenCode self-upgrades

* feat(vscode): support OpenCode upgrades

* fix: refresh OpenCode update status on runtime switch

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
2026-07-29 19:59:41 +03:00

58 lines
1.6 KiB
JavaScript

import { describe, expect, it, vi } from 'vitest';
import { resolveOpenCodeUpgradeCapability } from './upgrade-capability.js';
describe('OpenCode upgrade capability', () => {
it('assigns bundled binaries to the OpenChamber updater', () => {
const isBundledBinary = vi.fn(() => true);
expect(resolveOpenCodeUpgradeCapability({
isExternal: false,
hasManagedProcess: true,
activeBinary: '/Applications/OpenChamber.app/Contents/Resources/opencode-cli/opencode',
isBundledBinary,
})).toEqual({
supported: false,
manager: 'openchamber',
reason: 'bundled',
});
});
it('never upgrades external or unresolved runtimes', () => {
const isBundledBinary = vi.fn(() => false);
expect(resolveOpenCodeUpgradeCapability({
isExternal: true,
hasManagedProcess: false,
activeBinary: null,
isBundledBinary,
})).toEqual({
supported: false,
manager: 'external',
reason: 'external',
});
expect(resolveOpenCodeUpgradeCapability({
isExternal: false,
hasManagedProcess: false,
activeBinary: '/usr/local/bin/opencode',
isBundledBinary,
})).toEqual({
supported: false,
manager: null,
reason: 'unavailable',
});
});
it('allows OpenCode to upgrade a managed non-bundled binary', () => {
expect(resolveOpenCodeUpgradeCapability({
isExternal: false,
hasManagedProcess: true,
activeBinary: '/Users/alice/.opencode/bin/opencode',
isBundledBinary: () => false,
})).toEqual({
supported: true,
manager: 'opencode',
reason: null,
});
});
});