| import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test' |
| import axios from 'axios' |
|
|
| const originalEnv = { ...process.env } |
|
|
| async function importFreshModule() { |
| mock.restore() |
| return import(`./utils.ts?ts=${Date.now()}-${Math.random()}`) |
| } |
|
|
| beforeEach(() => { |
| process.env = { ...originalEnv } |
| }) |
|
|
| afterEach(() => { |
| process.env = { ...originalEnv } |
| mock.restore() |
| }) |
|
|
| describe('checkDomainBlocklist', () => { |
| test('returns allowed without API call in OpenAI mode', async () => { |
| process.env.CLAUDE_CODE_USE_OPENAI = '1' |
| const actual = await import('../../utils/model/providers.js') |
| mock.module('../../utils/model/providers.js', () => ({ |
| ...actual, |
| getAPIProvider: () => 'openai', |
| isFirstPartyAnthropicBaseUrl: () => false, |
| })) |
| const getSpy = mock(() => |
| Promise.resolve({ status: 200, data: { can_fetch: true } }), |
| ) |
| axios.get = getSpy as typeof axios.get |
|
|
| const { checkDomainBlocklist } = await importFreshModule() |
| const result = await checkDomainBlocklist('example.com') |
|
|
| expect(result.status).toBe('allowed') |
| expect(getSpy).not.toHaveBeenCalled() |
| }) |
|
|
| test('returns allowed without API call in Gemini mode', async () => { |
| process.env.CLAUDE_CODE_USE_GEMINI = '1' |
| const actual = await import('../../utils/model/providers.js') |
| mock.module('../../utils/model/providers.js', () => ({ |
| ...actual, |
| getAPIProvider: () => 'gemini', |
| isFirstPartyAnthropicBaseUrl: () => false, |
| })) |
| const getSpy = mock(() => |
| Promise.resolve({ status: 200, data: { can_fetch: true } }), |
| ) |
| axios.get = getSpy as typeof axios.get |
|
|
| const { checkDomainBlocklist } = await importFreshModule() |
| const result = await checkDomainBlocklist('example.com') |
|
|
| expect(result.status).toBe('allowed') |
| expect(getSpy).not.toHaveBeenCalled() |
| }) |
|
|
| test('calls Anthropic domain check in first-party mode', async () => { |
| delete process.env.CLAUDE_CODE_USE_OPENAI |
| delete process.env.CLAUDE_CODE_USE_GEMINI |
| delete process.env.CLAUDE_CODE_USE_GITHUB |
|
|
| const actual = await import('../../utils/model/providers.js') |
| mock.module('../../utils/model/providers.js', () => ({ |
| ...actual, |
| getAPIProvider: () => 'firstParty', |
| isFirstPartyAnthropicBaseUrl: () => true, |
| })) |
| const getSpy = mock(() => |
| Promise.resolve({ status: 200, data: { can_fetch: true } }), |
| ) |
| axios.get = getSpy as typeof axios.get |
|
|
| const { checkDomainBlocklist } = await importFreshModule() |
| const result = await checkDomainBlocklist('example.com') |
|
|
| expect(result.status).toBe('allowed') |
| expect(getSpy).toHaveBeenCalledTimes(1) |
| }) |
| }) |
|
|