summaryrefslogtreecommitdiff
path: root/packages/vscode-ide-companion/src/extension.test.ts
diff options
context:
space:
mode:
authorShreya Keshive <[email protected]>2025-08-06 15:47:58 -0400
committerGitHub <[email protected]>2025-08-06 19:47:58 +0000
commit024b8207eb75bdc0c031f6380d6759b9e342e502 (patch)
treedf6789c5ef0a53b0099bc3217f0e23f3ea2bacca /packages/vscode-ide-companion/src/extension.test.ts
parent1fb680baccf93fee5c96167da96fd31e4d57cf6f (diff)
Add hint to enable IDE integration for users running in VS Code (#5610)
Diffstat (limited to 'packages/vscode-ide-companion/src/extension.test.ts')
-rw-r--r--packages/vscode-ide-companion/src/extension.test.ts99
1 files changed, 99 insertions, 0 deletions
diff --git a/packages/vscode-ide-companion/src/extension.test.ts b/packages/vscode-ide-companion/src/extension.test.ts
new file mode 100644
index 00000000..89d1821f
--- /dev/null
+++ b/packages/vscode-ide-companion/src/extension.test.ts
@@ -0,0 +1,99 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
+import * as vscode from 'vscode';
+import { activate } from './extension.js';
+
+vi.mock('vscode', () => ({
+ window: {
+ createOutputChannel: vi.fn(() => ({
+ appendLine: vi.fn(),
+ })),
+ showInformationMessage: vi.fn(),
+ createTerminal: vi.fn(() => ({
+ show: vi.fn(),
+ sendText: vi.fn(),
+ })),
+ },
+ workspace: {
+ workspaceFolders: [],
+ onDidCloseTextDocument: vi.fn(),
+ registerTextDocumentContentProvider: vi.fn(),
+ onDidChangeWorkspaceFolders: vi.fn(),
+ },
+ commands: {
+ registerCommand: vi.fn(),
+ executeCommand: vi.fn(),
+ },
+ Uri: {
+ joinPath: vi.fn(),
+ },
+ ExtensionMode: {
+ Development: 1,
+ Production: 2,
+ },
+ EventEmitter: vi.fn(() => ({
+ event: vi.fn(),
+ fire: vi.fn(),
+ dispose: vi.fn(),
+ })),
+}));
+
+describe('activate', () => {
+ let context: vscode.ExtensionContext;
+
+ beforeEach(() => {
+ context = {
+ subscriptions: [],
+ environmentVariableCollection: {
+ replace: vi.fn(),
+ },
+ globalState: {
+ get: vi.fn(),
+ update: vi.fn(),
+ },
+ extensionUri: {
+ fsPath: '/path/to/extension',
+ },
+ } as unknown as vscode.ExtensionContext;
+ });
+
+ afterEach(() => {
+ vi.restoreAllMocks();
+ });
+
+ it('should show the info message on first activation', async () => {
+ const showInformationMessageMock = vi
+ .mocked(vscode.window.showInformationMessage)
+ .mockResolvedValue(undefined as never);
+ vi.mocked(context.globalState.get).mockReturnValue(undefined);
+ await activate(context);
+ expect(showInformationMessageMock).toHaveBeenCalledWith(
+ 'Gemini CLI Companion extension successfully installed. Please restart your terminal to enable full IDE integration.',
+ 'Re-launch Gemini CLI',
+ );
+ });
+
+ it('should not show the info message on subsequent activations', async () => {
+ vi.mocked(context.globalState.get).mockReturnValue(true);
+ await activate(context);
+ expect(vscode.window.showInformationMessage).not.toHaveBeenCalled();
+ });
+
+ it('should launch the Gemini CLI when the user clicks the button', async () => {
+ const showInformationMessageMock = vi
+ .mocked(vscode.window.showInformationMessage)
+ .mockResolvedValue('Re-launch Gemini CLI' as never);
+ vi.mocked(context.globalState.get).mockReturnValue(undefined);
+ await activate(context);
+ expect(showInformationMessageMock).toHaveBeenCalled();
+ await new Promise(process.nextTick); // Wait for the promise to resolve
+ expect(vscode.commands.executeCommand).toHaveBeenCalledWith(
+ 'gemini-cli.runGeminiCLI',
+ );
+ });
+});