58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { createOpenCodeNetworkRuntime } from './network-runtime.js';
|
|
|
|
const originalFetch = globalThis.fetch;
|
|
|
|
const createRuntime = (overrides = {}) => createOpenCodeNetworkRuntime({
|
|
state: {
|
|
openCodePort: 4096,
|
|
openCodeBaseUrl: null,
|
|
openCodeApiPrefix: '',
|
|
openCodeApiPrefixDetected: false,
|
|
openCodeApiDetectionTimer: null,
|
|
...overrides.state,
|
|
},
|
|
getOpenCodeAuthHeaders: () => ({}),
|
|
configuredOpenCodeHostname: overrides.configuredOpenCodeHostname,
|
|
});
|
|
|
|
describe('OpenCode network runtime', () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
globalThis.fetch = originalFetch;
|
|
});
|
|
|
|
it('returns false when readiness fetch rejects', async () => {
|
|
globalThis.fetch = vi.fn(async () => {
|
|
throw new Error('offline');
|
|
});
|
|
|
|
const runtime = createRuntime();
|
|
const readyPromise = runtime.waitForReady('http://127.0.0.1:4096', 1);
|
|
|
|
await expect(readyPromise).resolves.toBe(false);
|
|
});
|
|
|
|
it('builds managed OpenCode URLs against IPv4 loopback by default', () => {
|
|
const runtime = createRuntime();
|
|
|
|
expect(runtime.buildOpenCodeUrl('/provider')).toBe('http://127.0.0.1:4096/provider');
|
|
});
|
|
|
|
it('keeps external OpenCode base URLs authoritative', () => {
|
|
const runtime = createRuntime({
|
|
state: { openCodeBaseUrl: 'http://remote.example:4096' },
|
|
});
|
|
|
|
expect(runtime.buildOpenCodeUrl('/provider')).toBe('http://remote.example:4096/provider');
|
|
});
|
|
|
|
it('normalizes wildcard and IPv6 OpenCode bind hosts for local connects', () => {
|
|
expect(createRuntime({ configuredOpenCodeHostname: '0.0.0.0' }).buildOpenCodeUrl('/provider'))
|
|
.toBe('http://127.0.0.1:4096/provider');
|
|
expect(createRuntime({ configuredOpenCodeHostname: '::1' }).buildOpenCodeUrl('/provider'))
|
|
.toBe('http://[::1]:4096/provider');
|
|
});
|
|
});
|