story-206: default to claude-code-pty on first use
Squash merge of feature/story-206 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -68,6 +68,61 @@ function setupMocks() {
|
||||
mockedApi.setAnthropicApiKey.mockResolvedValue(true);
|
||||
}
|
||||
|
||||
describe("Default provider selection (Story 206)", () => {
|
||||
beforeEach(() => {
|
||||
capturedWsHandlers = null;
|
||||
});
|
||||
|
||||
it("AC1: defaults to claude-code-pty when no saved model preference exists", async () => {
|
||||
mockedApi.getOllamaModels.mockResolvedValue([]);
|
||||
mockedApi.getAnthropicApiKeyExists.mockResolvedValue(false);
|
||||
mockedApi.getAnthropicModels.mockResolvedValue([]);
|
||||
mockedApi.getModelPreference.mockResolvedValue(null);
|
||||
mockedApi.setModelPreference.mockResolvedValue(true);
|
||||
mockedApi.cancelChat.mockResolvedValue(true);
|
||||
|
||||
render(<Chat projectPath="/tmp/project" onCloseProject={vi.fn()} />);
|
||||
|
||||
await waitFor(() => expect(capturedWsHandlers).not.toBeNull());
|
||||
|
||||
// With no models available, the header renders a text input with the model value
|
||||
const input = screen.getByPlaceholderText("Model");
|
||||
expect(input).toHaveValue("claude-code-pty");
|
||||
});
|
||||
|
||||
it("AC2: claude-code-pty remains default even when ollama models are available", async () => {
|
||||
mockedApi.getOllamaModels.mockResolvedValue(["llama3.1", "deepseek-coder"]);
|
||||
mockedApi.getAnthropicApiKeyExists.mockResolvedValue(false);
|
||||
mockedApi.getAnthropicModels.mockResolvedValue([]);
|
||||
mockedApi.getModelPreference.mockResolvedValue(null);
|
||||
mockedApi.setModelPreference.mockResolvedValue(true);
|
||||
mockedApi.cancelChat.mockResolvedValue(true);
|
||||
|
||||
render(<Chat projectPath="/tmp/project" onCloseProject={vi.fn()} />);
|
||||
|
||||
// Wait for Ollama models to load and the select dropdown to appear
|
||||
const select = await screen.findByRole("combobox");
|
||||
expect(select).toHaveValue("claude-code-pty");
|
||||
});
|
||||
|
||||
it("AC3: respects saved model preference for existing projects", async () => {
|
||||
mockedApi.getOllamaModels.mockResolvedValue(["llama3.1"]);
|
||||
mockedApi.getAnthropicApiKeyExists.mockResolvedValue(false);
|
||||
mockedApi.getAnthropicModels.mockResolvedValue([]);
|
||||
mockedApi.getModelPreference.mockResolvedValue("llama3.1");
|
||||
mockedApi.setModelPreference.mockResolvedValue(true);
|
||||
mockedApi.cancelChat.mockResolvedValue(true);
|
||||
|
||||
render(<Chat projectPath="/tmp/project" onCloseProject={vi.fn()} />);
|
||||
|
||||
// Wait for models to load and preference to be applied
|
||||
const select = await screen.findByRole("combobox");
|
||||
await waitFor(() => {
|
||||
expect(select).toHaveValue("llama3.1");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("Chat message rendering — unified tool call UI", () => {
|
||||
beforeEach(() => {
|
||||
capturedWsHandlers = null;
|
||||
|
||||
Reference in New Issue
Block a user