From 5955c01ce87b246625e80f840dde0f04f6b9f69c Mon Sep 17 00:00:00 2001 From: Pugazhendhi Date: Fri, 7 Feb 2025 14:05:08 +0530 Subject: [PATCH] Removed AutoApproveMenu.test.tsx --- src/api/providers/openai-native.ts | 20 +- .../chat/__tests__/AutoApproveMenu.test.tsx | 209 ------------------ 2 files changed, 12 insertions(+), 217 deletions(-) delete mode 100644 webview-ui/src/components/chat/__tests__/AutoApproveMenu.test.tsx diff --git a/src/api/providers/openai-native.ts b/src/api/providers/openai-native.ts index af5e77390f..585a71aec3 100644 --- a/src/api/providers/openai-native.ts +++ b/src/api/providers/openai-native.ts @@ -41,7 +41,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private async *handleO1FamilyMessage( modelId: string, systemPrompt: string, - messages: Anthropic.Messages.MessageParam[], + messages: Anthropic.Messages.MessageParam[] ): ApiStream { // o1 supports developer prompt with formatting // o1-preview and o1-mini only support user messages @@ -63,7 +63,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private async *handleO3FamilyMessage( modelId: string, systemPrompt: string, - messages: Anthropic.Messages.MessageParam[], + messages: Anthropic.Messages.MessageParam[] ): ApiStream { const stream = await this.client.chat.completions.create({ model: "o3-mini", @@ -85,7 +85,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private async *handleDefaultModelMessage( modelId: string, systemPrompt: string, - messages: Anthropic.Messages.MessageParam[], + messages: Anthropic.Messages.MessageParam[] ): ApiStream { const stream = await this.client.chat.completions.create({ model: modelId, @@ -98,7 +98,9 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler yield* this.handleStreamResponse(stream) } - private async *yieldResponseData(response: OpenAI.Chat.Completions.ChatCompletion): ApiStream { + private async *yieldResponseData( + response: OpenAI.Chat.Completions.ChatCompletion + ): ApiStream { yield { type: "text", text: response.choices[0]?.message.content || "", @@ -110,7 +112,9 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler } } - private async *handleStreamResponse(stream: AsyncIterable): ApiStream { + private async *handleStreamResponse( + stream: AsyncIterable + ): ApiStream { for await (const chunk of stream) { const delta = chunk.choices[0]?.delta if (delta?.content) { @@ -164,7 +168,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private getO1CompletionOptions( modelId: string, - prompt: string, + prompt: string ): OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming { return { model: modelId, @@ -174,7 +178,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private getO3CompletionOptions( modelId: string, - prompt: string, + prompt: string ): OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming { return { model: "o3-mini", @@ -185,7 +189,7 @@ export class OpenAiNativeHandler implements ApiHandler, SingleCompletionHandler private getDefaultCompletionOptions( modelId: string, - prompt: string, + prompt: string ): OpenAI.Chat.Completions.ChatCompletionCreateParamsNonStreaming { return { model: modelId, diff --git a/webview-ui/src/components/chat/__tests__/AutoApproveMenu.test.tsx b/webview-ui/src/components/chat/__tests__/AutoApproveMenu.test.tsx deleted file mode 100644 index 5a9868fae9..0000000000 --- a/webview-ui/src/components/chat/__tests__/AutoApproveMenu.test.tsx +++ /dev/null @@ -1,209 +0,0 @@ -import { render, fireEvent, screen } from "@testing-library/react" -import { useExtensionState } from "../../../context/ExtensionStateContext" -import AutoApproveMenu from "../AutoApproveMenu" -import { defaultModeSlug, defaultPrompts } from "../../../../../src/shared/modes" -import { experimentDefault } from "../../../../../src/shared/experiments" - -// Mock the ExtensionStateContext hook -jest.mock("../../../context/ExtensionStateContext") - -const mockUseExtensionState = useExtensionState as jest.MockedFunction - -describe("AutoApproveMenu", () => { - const defaultMockState = { - // Required state properties - version: "1.0.0", - clineMessages: [], - taskHistory: [], - shouldShowAnnouncement: false, - allowedCommands: [], - soundEnabled: false, - soundVolume: 0.5, - diffEnabled: false, - fuzzyMatchThreshold: 1.0, - preferredLanguage: "English", - writeDelayMs: 1000, - browserViewportSize: "900x600", - screenshotQuality: 75, - terminalOutputLineLimit: 500, - mcpEnabled: true, - requestDelaySeconds: 5, - currentApiConfigName: "default", - listApiConfigMeta: [], - mode: defaultModeSlug, - customModePrompts: defaultPrompts, - customSupportPrompts: {}, - enhancementApiConfigId: "", - didHydrateState: true, - showWelcome: false, - theme: {}, - glamaModels: {}, - openRouterModels: {}, - openAiModels: [], - unboundModels: {}, - mcpServers: [], - filePaths: [], - experiments: experimentDefault, - customModes: [], - - // Auto-approve specific properties - alwaysAllowReadOnly: false, - alwaysAllowWrite: false, - alwaysAllowExecute: false, - alwaysAllowBrowser: false, - alwaysAllowMcp: false, - alwaysApproveResubmit: false, - alwaysAllowModeSwitch: false, - autoApprovalEnabled: false, - - // Required setter functions - setApiConfiguration: jest.fn(), - setCustomInstructions: jest.fn(), - setAlwaysAllowReadOnly: jest.fn(), - setAlwaysAllowWrite: jest.fn(), - setAlwaysAllowExecute: jest.fn(), - setAlwaysAllowBrowser: jest.fn(), - setAlwaysAllowMcp: jest.fn(), - setAlwaysAllowModeSwitch: jest.fn(), - setShowAnnouncement: jest.fn(), - setAllowedCommands: jest.fn(), - setSoundEnabled: jest.fn(), - setSoundVolume: jest.fn(), - setDiffEnabled: jest.fn(), - setBrowserViewportSize: jest.fn(), - setFuzzyMatchThreshold: jest.fn(), - setPreferredLanguage: jest.fn(), - setWriteDelayMs: jest.fn(), - setScreenshotQuality: jest.fn(), - setTerminalOutputLineLimit: jest.fn(), - setMcpEnabled: jest.fn(), - setAlwaysApproveResubmit: jest.fn(), - setRequestDelaySeconds: jest.fn(), - setCurrentApiConfigName: jest.fn(), - setListApiConfigMeta: jest.fn(), - onUpdateApiConfig: jest.fn(), - setMode: jest.fn(), - setCustomModePrompts: jest.fn(), - setCustomSupportPrompts: jest.fn(), - setEnhancementApiConfigId: jest.fn(), - setAutoApprovalEnabled: jest.fn(), - setExperimentEnabled: jest.fn(), - handleInputChange: jest.fn(), - setCustomModes: jest.fn(), - } - - beforeEach(() => { - mockUseExtensionState.mockReturnValue(defaultMockState) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it("renders with initial collapsed state", () => { - render() - - // Check for main checkbox and label - expect(screen.getByText("Auto-approve:")).toBeInTheDocument() - expect(screen.getByText("None")).toBeInTheDocument() - - // Verify the menu is collapsed (actions not visible) - expect(screen.queryByText("Read files and directories")).not.toBeInTheDocument() - }) - - it("expands menu when clicked", () => { - render() - - // Click to expand - fireEvent.click(screen.getByText("Auto-approve:")) - - // Verify menu items are visible - expect(screen.getByText("Read files and directories")).toBeInTheDocument() - expect(screen.getByText("Edit files")).toBeInTheDocument() - expect(screen.getByText("Execute approved commands")).toBeInTheDocument() - expect(screen.getByText("Use the browser")).toBeInTheDocument() - expect(screen.getByText("Use MCP servers")).toBeInTheDocument() - expect(screen.getByText("Retry failed requests")).toBeInTheDocument() - }) - - it("toggles main auto-approval checkbox", () => { - render() - - const mainCheckbox = screen.getByRole("checkbox") - fireEvent.click(mainCheckbox) - - expect(defaultMockState.setAutoApprovalEnabled).toHaveBeenCalledWith(true) - }) - - it("toggles individual permissions", () => { - render() - - // Expand menu - fireEvent.click(screen.getByText("Auto-approve:")) - - // Click read files checkbox - fireEvent.click(screen.getByText("Read files and directories")) - expect(defaultMockState.setAlwaysAllowReadOnly).toHaveBeenCalledWith(true) - - // Click edit files checkbox - fireEvent.click(screen.getByText("Edit files")) - expect(defaultMockState.setAlwaysAllowWrite).toHaveBeenCalledWith(true) - - // Click execute commands checkbox - fireEvent.click(screen.getByText("Execute approved commands")) - expect(defaultMockState.setAlwaysAllowExecute).toHaveBeenCalledWith(true) - }) - - it("displays enabled actions in summary", () => { - mockUseExtensionState.mockReturnValue({ - ...defaultMockState, - alwaysAllowReadOnly: true, - alwaysAllowWrite: true, - autoApprovalEnabled: true, - }) - - render() - - // Check that enabled actions are shown in summary - expect(screen.getByText("Read, Edit")).toBeInTheDocument() - }) - - it("preserves checkbox states", () => { - // Mock state with some permissions enabled - const mockState = { - ...defaultMockState, - alwaysAllowReadOnly: true, - alwaysAllowWrite: true, - } - - // Update mock to return our state - mockUseExtensionState.mockReturnValue(mockState) - - render() - - // Expand menu - fireEvent.click(screen.getByText("Auto-approve:")) - - // Verify read and edit checkboxes are checked - expect(screen.getByLabelText("Read files and directories")).toBeInTheDocument() - expect(screen.getByLabelText("Edit files")).toBeInTheDocument() - - // Verify the setters haven't been called yet - expect(mockState.setAlwaysAllowReadOnly).not.toHaveBeenCalled() - expect(mockState.setAlwaysAllowWrite).not.toHaveBeenCalled() - - // Collapse menu - fireEvent.click(screen.getByText("Auto-approve:")) - - // Expand again - fireEvent.click(screen.getByText("Auto-approve:")) - - // Verify checkboxes are still present - expect(screen.getByLabelText("Read files and directories")).toBeInTheDocument() - expect(screen.getByLabelText("Edit files")).toBeInTheDocument() - - // Verify the setters still haven't been called - expect(mockState.setAlwaysAllowReadOnly).not.toHaveBeenCalled() - expect(mockState.setAlwaysAllowWrite).not.toHaveBeenCalled() - }) -})