mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-14 04:15:52 +00:00
feat(api): add OrcaRouter provider preset
Add a named 'orcarouter' preset to the shared provider catalog mirroring the existing OpenRouter entry: OpenAI-compatible base URL https://api.orcarouter.ai/v1, default model openai/gpt-5.5, sk-orca-... key placeholder, and a dashboard icon. Regenerate the throw-error baseline for the line shift in provider-preset-catalog.ts. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
1 parent
a0990e0ef1
commit
ea7906b975
5 files changed
+85
-9
No files matched your search
@@ -0,0 +1,58 @@
|
||||
import { describe, expect, it } from 'bun:test';
|
||||
import { getPresetById, isValidPresetId } from '../../../src/api/services/provider-presets';
|
||||
import { PROVIDER_PRESET_IDS } from '../../../src/shared/provider-preset-catalog';
|
||||
|
||||
describe('provider-presets-orcarouter', () => {
|
||||
it('resolves orcarouter preset id', () => {
|
||||
const preset = getPresetById('orcarouter');
|
||||
expect(preset?.id).toBe('orcarouter');
|
||||
expect(preset?.baseUrl).toBe('https://api.orcarouter.ai/v1');
|
||||
expect(preset?.defaultProfileName).toBe('orcarouter');
|
||||
});
|
||||
|
||||
it('registers orcarouter in PROVIDER_PRESET_IDS', () => {
|
||||
expect(PROVIDER_PRESET_IDS).toContain('orcarouter');
|
||||
});
|
||||
|
||||
it('uses the OpenAI-compatible base URL with a /v1 suffix', () => {
|
||||
const preset = getPresetById('orcarouter');
|
||||
expect(preset?.baseUrl).toBe('https://api.orcarouter.ai/v1');
|
||||
expect(preset?.baseUrl.endsWith('/v1')).toBe(true);
|
||||
});
|
||||
|
||||
it('pins a provider/model default (openai/gpt-5.5)', () => {
|
||||
const preset = getPresetById('orcarouter');
|
||||
expect(preset?.defaultModel).toBe('openai/gpt-5.5');
|
||||
});
|
||||
|
||||
it('validates orcarouter preset requires an API key with the sk-orca- placeholder', () => {
|
||||
const preset = getPresetById('orcarouter');
|
||||
expect(preset?.requiresApiKey).toBe(true);
|
||||
expect(preset?.apiKeyPlaceholder).toBe('sk-orca-...');
|
||||
});
|
||||
|
||||
it('is a recommended, featured provider', () => {
|
||||
const preset = getPresetById('orcarouter');
|
||||
expect(preset?.category).toBe('recommended');
|
||||
expect(preset?.featured).toBe(true);
|
||||
});
|
||||
|
||||
it('treats orcarouter as a valid preset id', () => {
|
||||
expect(isValidPresetId('orcarouter')).toBe(true);
|
||||
});
|
||||
|
||||
it('handles whitespace in orcarouter preset id', () => {
|
||||
const preset = getPresetById(' orcarouter ');
|
||||
expect(preset?.id).toBe('orcarouter');
|
||||
});
|
||||
|
||||
it('handles uppercase orcarouter preset id', () => {
|
||||
const preset = getPresetById('ORCAROUTER');
|
||||
expect(preset?.id).toBe('orcarouter');
|
||||
});
|
||||
|
||||
it('does not resolve partial or invalid orcarouter ids', () => {
|
||||
expect(getPresetById('orcarouter-invalid')).toBeUndefined();
|
||||
expect(isValidPresetId('orcarouter-invalid')).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user