mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-19 22:18:26 +00:00
85 lines
2.9 KiB
TypeScript
85 lines
2.9 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import i18n from '@/lib/i18n';
|
|
import { OpenRouterQuickStart } from '@/components/profiles/openrouter-quick-start';
|
|
import { render, screen, userEvent } from '@tests/setup/test-utils';
|
|
|
|
vi.mock('@/hooks/use-openrouter-models', () => ({
|
|
useOpenRouterReady: () => ({
|
|
modelCount: 318,
|
|
isLoading: false,
|
|
}),
|
|
}));
|
|
|
|
vi.mock('@/hooks/use-local-runtime-readiness', () => ({
|
|
useLocalRuntimeReadiness: () => ({
|
|
data: {
|
|
runtimes: [
|
|
{
|
|
id: 'ollama',
|
|
status: 'offline',
|
|
endpoint: 'http://127.0.0.1:11434',
|
|
commandHint: 'ollama serve',
|
|
recommendedModel: 'gemma4:e4b',
|
|
recommendedModelInstalled: false,
|
|
detectedModelCount: 0,
|
|
},
|
|
{
|
|
id: 'llamacpp',
|
|
status: 'ready',
|
|
endpoint: 'http://127.0.0.1:8080',
|
|
commandHint: './server --host 0.0.0.0 --port 8080 -m model.gguf',
|
|
recommendedModel: null,
|
|
recommendedModelInstalled: true,
|
|
detectedModelCount: 1,
|
|
},
|
|
],
|
|
},
|
|
isLoading: false,
|
|
}),
|
|
}));
|
|
|
|
describe('OpenRouterQuickStart', () => {
|
|
const props = {
|
|
onOpenRouterClick: vi.fn(),
|
|
onAlibabaCodingPlanClick: vi.fn(),
|
|
onCliproxyClick: vi.fn(),
|
|
onCustomClick: vi.fn(),
|
|
onOllamaClick: vi.fn(),
|
|
onLlamacppClick: vi.fn(),
|
|
};
|
|
|
|
beforeEach(async () => {
|
|
await i18n.changeLanguage('en');
|
|
});
|
|
|
|
it('prompts the user to select an existing API profile instead of showing the empty-state copy', () => {
|
|
render(<OpenRouterQuickStart hasProfiles profileCount={1} {...props} />);
|
|
|
|
expect(
|
|
screen.getByRole('heading', { name: 'Choose a profile or add another lane' })
|
|
).toBeInTheDocument();
|
|
expect(screen.getByText('1 profile')).toBeInTheDocument();
|
|
expect(screen.getByText(/You already have 1 profile in this workspace\./)).toBeInTheDocument();
|
|
expect(screen.queryByText('No API profiles yet')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('shows the new local lane with readiness-aware calls to action', async () => {
|
|
render(<OpenRouterQuickStart hasProfiles={false} profileCount={0} {...props} />);
|
|
|
|
expect(
|
|
screen.getByRole('heading', { name: 'Choose your first profile lane' })
|
|
).toBeInTheDocument();
|
|
expect(screen.getByText('Ollama + Gemma 4')).toBeInTheDocument();
|
|
expect(screen.getByText('llama.cpp')).toBeInTheDocument();
|
|
expect(
|
|
screen.getByText('Run `ollama serve` to bring the local endpoint online.')
|
|
).toBeInTheDocument();
|
|
expect(screen.getByText('Endpoint ready at http://127.0.0.1:8080')).toBeInTheDocument();
|
|
expect(screen.getByText('No local models detected yet')).toBeInTheDocument();
|
|
expect(screen.getByText('1 local model detected')).toBeInTheDocument();
|
|
|
|
await userEvent.click(screen.getByRole('button', { name: 'Set up Ollama' }));
|
|
expect(props.onOllamaClick).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|