102 lines
3.8 KiB
TypeScript
102 lines
3.8 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
import { infistarToResource } from '../src/features/providers/adapters';
|
|
import { PROVIDER_LOGOS } from '../src/features/providers/brandLogos';
|
|
import { PROVIDER_BRAND_ORDER } from '../src/features/providers/descriptors';
|
|
import {
|
|
INFISTAR_AFFILIATE_URL,
|
|
INFISTAR_BASE_URL_OPTIONS,
|
|
INFISTAR_DOMESTIC_BASE_URL,
|
|
INFISTAR_DOMESTIC_ROOT_URL,
|
|
INFISTAR_GLOBAL_BASE_URL,
|
|
INFISTAR_GLOBAL_ROOT_URL,
|
|
buildInfistarRaw,
|
|
getInfistarProtocolUrls,
|
|
resolveInfistarBaseUrl,
|
|
} from '../src/features/providers/infistar';
|
|
import { getSponsorProviderDefinition } from '../src/features/providers/sponsorDefinitions';
|
|
|
|
const allProtocolConfig = {
|
|
openaiCompatibility: [
|
|
{
|
|
name: 'infistar',
|
|
baseUrl: INFISTAR_DOMESTIC_BASE_URL,
|
|
apiKeyEntries: [{ apiKey: 'openai-key' }],
|
|
},
|
|
],
|
|
claudeApiKeys: [{ apiKey: 'claude-key', baseUrl: INFISTAR_DOMESTIC_ROOT_URL }],
|
|
codexApiKeys: [{ apiKey: 'codex-key', baseUrl: INFISTAR_DOMESTIC_BASE_URL }],
|
|
geminiApiKeys: [{ apiKey: 'gemini-key', baseUrl: INFISTAR_DOMESTIC_ROOT_URL }],
|
|
interactionsApiKeys: [{ apiKey: 'interactions-key', baseUrl: INFISTAR_DOMESTIC_BASE_URL }],
|
|
};
|
|
|
|
describe('Infistar sponsor provider', () => {
|
|
test('offers the requested mainland China and global URLs', () => {
|
|
expect(INFISTAR_AFFILIATE_URL).toBe(
|
|
'https://infistar.ai/register?aff=FQKC6J6R&ref_source=link'
|
|
);
|
|
expect(
|
|
INFISTAR_BASE_URL_OPTIONS.map(({ id, baseUrl }) => ({
|
|
id,
|
|
baseUrl,
|
|
}))
|
|
).toEqual([
|
|
{ id: 'mainlandChina', baseUrl: 'https://coneverse.com/v1' },
|
|
{ id: 'global', baseUrl: 'https://infistar.ai/v1' },
|
|
]);
|
|
expect(resolveInfistarBaseUrl(undefined)).toBe(INFISTAR_DOMESTIC_BASE_URL);
|
|
expect(resolveInfistarBaseUrl(INFISTAR_GLOBAL_ROOT_URL)).toBe(INFISTAR_GLOBAL_BASE_URL);
|
|
});
|
|
|
|
test('maps both choices to all four supported protocol endpoints', () => {
|
|
expect(getInfistarProtocolUrls(undefined)).toEqual({
|
|
openai: 'https://coneverse.com/v1',
|
|
codex: 'https://coneverse.com/v1',
|
|
anthropic: 'https://coneverse.com',
|
|
gemini: 'https://coneverse.com',
|
|
});
|
|
expect(getInfistarProtocolUrls(INFISTAR_GLOBAL_BASE_URL)).toEqual({
|
|
openai: 'https://infistar.ai/v1',
|
|
codex: 'https://infistar.ai/v1',
|
|
anthropic: 'https://infistar.ai',
|
|
gemini: 'https://infistar.ai',
|
|
});
|
|
|
|
const definition = getSponsorProviderDefinition('infistar');
|
|
expect(definition.protocols).toEqual(['openai', 'claude', 'gemini', 'codex']);
|
|
expect(definition.protocols).not.toContain('interactions');
|
|
});
|
|
|
|
test('aggregates four protocol configs without claiming Interactions API', () => {
|
|
const raw = buildInfistarRaw(allProtocolConfig);
|
|
|
|
expect(raw.openai.map((item) => item.index)).toEqual([0]);
|
|
expect(raw.claude.map((item) => item.index)).toEqual([0]);
|
|
expect(raw.codex.map((item) => item.index)).toEqual([0]);
|
|
expect(raw.gemini.map((item) => item.index)).toEqual([0]);
|
|
|
|
const resource = infistarToResource(raw);
|
|
expect(resource?.brand).toBe('infistar');
|
|
expect(resource?.name).toBe('无限星河');
|
|
expect(resource?.flags.protocols).toEqual(['openai', 'anthropic', 'gemini', 'codexResponses']);
|
|
});
|
|
|
|
test('keeps custom endpoints outside the Infistar sponsor group', () => {
|
|
const raw = buildInfistarRaw({
|
|
openaiCompatibility: [
|
|
{
|
|
name: 'infistar',
|
|
baseUrl: 'https://gateway.example.com/v1',
|
|
apiKeyEntries: [{ apiKey: 'custom-key' }],
|
|
},
|
|
],
|
|
});
|
|
|
|
expect(raw.openai).toEqual([]);
|
|
});
|
|
|
|
test('is appended to the provider catalog with the supplied logo', () => {
|
|
expect(PROVIDER_BRAND_ORDER.at(-1)).toBe('infistar');
|
|
expect(PROVIDER_LOGOS.infistar.src).toContain('infistar.png');
|
|
expect(PROVIDER_LOGOS.infistar.transparent).toBe(true);
|
|
});
|
|
});
|