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>
This commit is contained in:
committed by
GitHub
co-authored by
Bohdan Triapitsyn
parent
c0405d3fa4
commit
c88dd16d2a
@@ -0,0 +1,57 @@
|
||||
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,
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user