40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { HttpAPIClient } from '../../../src/renderer/api/httpClient';
|
|
|
|
class MockEventSource {
|
|
onopen: (() => void) | null = null;
|
|
onerror: (() => void) | null = null;
|
|
addEventListener(): void {
|
|
// noop browser-mode stub
|
|
}
|
|
close(): void {
|
|
// noop browser-mode stub
|
|
}
|
|
}
|
|
|
|
describe('HttpAPIClient Codex account browser fallback', () => {
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it('rejects Codex account actions with a consistent browser-mode error and returns a safe noop subscription', async () => {
|
|
vi.stubGlobal('EventSource', MockEventSource);
|
|
const client = new HttpAPIClient('http://localhost:9999');
|
|
const expectedMessage = 'Codex account bridge is unavailable in browser mode';
|
|
|
|
await expect(client.getCodexAccountSnapshot()).rejects.toThrow(expectedMessage);
|
|
await expect(
|
|
client.refreshCodexAccountSnapshot({
|
|
includeRateLimits: true,
|
|
forceRefreshToken: true,
|
|
})
|
|
).rejects.toThrow(expectedMessage);
|
|
await expect(client.startCodexChatgptLogin()).rejects.toThrow(expectedMessage);
|
|
await expect(client.cancelCodexChatgptLogin()).rejects.toThrow(expectedMessage);
|
|
await expect(client.logoutCodexAccount()).rejects.toThrow(expectedMessage);
|
|
|
|
expect(typeof client.onCodexAccountSnapshotChanged(() => undefined)).toBe('function');
|
|
});
|
|
});
|