Pass whole extensions rather than just context files (#10910)

Co-authored-by: Jake Macdonald <jakemac@google.com>
This commit is contained in:
Zack Birkenbuel
2025-10-20 16:15:23 -07:00
committed by GitHub
parent 995ae717cc
commit cc7e1472f9
35 changed files with 487 additions and 1193 deletions
@@ -8,21 +8,18 @@ import { vi } from 'vitest';
import * as fs from 'node:fs';
import * as os from 'node:os';
import * as path from 'node:path';
import {
annotateActiveExtensions,
loadExtension,
} from '../../config/extension.js';
import { loadExtension } from '../../config/extension.js';
import { createExtension } from '../../test-utils/createExtension.js';
import { useExtensionUpdates } from './useExtensionUpdates.js';
import { GEMINI_DIR, type GeminiCLIExtension } from '@google/gemini-cli-core';
import { renderHook, waitFor } from '@testing-library/react';
import { MessageType } from '../types.js';
import { ExtensionEnablementManager } from '../../config/extensions/extensionEnablement.js';
import {
checkForAllExtensionUpdates,
updateExtension,
} from '../../config/extensions/update.js';
import { ExtensionUpdateState } from '../state/extensions.js';
import { ExtensionEnablementManager } from '../../config/extensions/extensionEnablement.js';
vi.mock('os', async (importOriginal) => {
const mockedOs = await importOriginal<typeof os>();
@@ -76,7 +73,7 @@ describe('useExtensionUpdates', () => {
const cwd = '/test/cwd';
vi.mocked(checkForAllExtensionUpdates).mockImplementation(
async (_extensions, dispatch, _cwd) => {
async (_extensions, _extensionEnablementManager, dispatch, _cwd) => {
dispatch({
type: 'SET_STATE',
payload: {
@@ -88,7 +85,12 @@ describe('useExtensionUpdates', () => {
);
renderHook(() =>
useExtensionUpdates(extensions as GeminiCLIExtension[], addItem, cwd),
useExtensionUpdates(
extensions as GeminiCLIExtension[],
new ExtensionEnablementManager(),
addItem,
cwd,
),
);
await waitFor(() => {
@@ -113,16 +115,17 @@ describe('useExtensionUpdates', () => {
autoUpdate: true,
},
});
const extension = annotateActiveExtensions(
[loadExtension({ extensionDir, workspaceDir: tempHomeDir })!],
tempHomeDir,
new ExtensionEnablementManager(),
)[0];
const extensionEnablementManager = new ExtensionEnablementManager();
const extension = loadExtension({
extensionDir,
workspaceDir: tempHomeDir,
extensionEnablementManager,
})!;
const addItem = vi.fn();
vi.mocked(checkForAllExtensionUpdates).mockImplementation(
async (_extensions, dispatch, _cwd) => {
async (_extensions, _extensionEnablementManager, dispatch, _cwd) => {
dispatch({
type: 'SET_STATE',
payload: {
@@ -139,7 +142,14 @@ describe('useExtensionUpdates', () => {
name: '',
});
renderHook(() => useExtensionUpdates([extension], addItem, tempHomeDir));
renderHook(() =>
useExtensionUpdates(
[extension],
extensionEnablementManager,
addItem,
tempHomeDir,
),
);
await waitFor(
() => {
@@ -177,25 +187,24 @@ describe('useExtensionUpdates', () => {
},
});
const extensions = annotateActiveExtensions(
[
loadExtension({
extensionDir: extensionDir1,
workspaceDir: tempHomeDir,
})!,
loadExtension({
extensionDir: extensionDir2,
workspaceDir: tempHomeDir,
})!,
],
tempHomeDir,
new ExtensionEnablementManager(),
);
const extensionEnablementManager = new ExtensionEnablementManager();
const extensions = [
loadExtension({
extensionDir: extensionDir1,
workspaceDir: tempHomeDir,
extensionEnablementManager,
})!,
loadExtension({
extensionDir: extensionDir2,
workspaceDir: tempHomeDir,
extensionEnablementManager,
})!,
];
const addItem = vi.fn();
vi.mocked(checkForAllExtensionUpdates).mockImplementation(
async (_extensions, dispatch, _cwd) => {
async (_extensions, _extensionEnablementManager, dispatch, _cwd) => {
dispatch({
type: 'SET_STATE',
payload: {
@@ -225,7 +234,14 @@ describe('useExtensionUpdates', () => {
name: '',
});
renderHook(() => useExtensionUpdates(extensions, addItem, tempHomeDir));
renderHook(() =>
useExtensionUpdates(
extensions,
extensionEnablementManager,
addItem,
tempHomeDir,
),
);
await waitFor(
() => {
@@ -282,7 +298,7 @@ describe('useExtensionUpdates', () => {
const cwd = '/test/cwd';
vi.mocked(checkForAllExtensionUpdates).mockImplementation(
async (_extensions, dispatch, _cwd) => {
async (_extensions, _extensionEnablementManager, dispatch, _cwd) => {
dispatch({ type: 'BATCH_CHECK_START' });
dispatch({
type: 'SET_STATE',
@@ -303,8 +319,14 @@ describe('useExtensionUpdates', () => {
},
);
const extensionEnablementManager = new ExtensionEnablementManager();
renderHook(() =>
useExtensionUpdates(extensions as GeminiCLIExtension[], addItem, cwd),
useExtensionUpdates(
extensions as GeminiCLIExtension[],
extensionEnablementManager,
addItem,
cwd,
),
);
await waitFor(() => {