Download packages/cli/src/ui/commands/compressCommand.test.ts from SaylorTwift/gemini-cli: direct link, hf CLI and curl.
- Browser
- Download file 4.55 kB
-
https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/commands/compressCommand.test.ts
- Command line
-
hf download hf://SaylorTwift/gemini-cli/packages/cli/src/ui/commands/compressCommand.test.ts
-
curl -L -o compressCommand.test.ts https://huggingface.co/SaylorTwift/gemini-cli/resolve/main/packages/cli/src/ui/commands/compressCommand.test.ts
4.55 kB
| /** | |
| * @license | |
| * Copyright 2025 Google LLC | |
| * SPDX-License-Identifier: Apache-2.0 | |
| */ | |
| import { | |
| CompressionStatus, | |
| type ChatCompressionInfo, | |
| type GeminiClient, | |
| } from '@google/gemini-cli-core'; | |
| import { vi, describe, it, expect, beforeEach } from 'vitest'; | |
| import { compressCommand } from './compressCommand.js'; | |
| import { createMockCommandContext } from '../../test-utils/mockCommandContext.js'; | |
| import { MessageType } from '../types.js'; | |
| describe('compressCommand', () => { | |
| let context: ReturnType<typeof createMockCommandContext>; | |
| let mockTryCompressChat: ReturnType<typeof vi.fn>; | |
| beforeEach(() => { | |
| mockTryCompressChat = vi.fn(); | |
| context = createMockCommandContext({ | |
| services: { | |
| agentContext: { | |
| geminiClient: { | |
| tryCompressChat: mockTryCompressChat, | |
| } as unknown as GeminiClient, | |
| }, | |
| }, | |
| }); | |
| }); | |
| it('should do nothing if a compression is already pending', async () => { | |
| context.ui.pendingItem = { | |
| type: MessageType.COMPRESSION, | |
| compression: { | |
| isPending: true, | |
| originalTokenCount: null, | |
| newTokenCount: null, | |
| compressionStatus: null, | |
| }, | |
| }; | |
| await compressCommand.action!(context, ''); | |
| await new Promise((r) => setTimeout(r, 0)); | |
| expect(context.ui.addItem).toHaveBeenCalledWith( | |
| expect.objectContaining({ | |
| type: MessageType.ERROR, | |
| text: 'Already compressing, wait for previous request to complete', | |
| }), | |
| expect.any(Number), | |
| ); | |
| expect(context.ui.setPendingItem).not.toHaveBeenCalled(); | |
| expect(mockTryCompressChat).not.toHaveBeenCalled(); | |
| }); | |
| it('should set pending item, call tryCompressChat, and add result on success', async () => { | |
| const compressedResult: ChatCompressionInfo = { | |
| originalTokenCount: 200, | |
| compressionStatus: CompressionStatus.COMPRESSED, | |
| newTokenCount: 100, | |
| }; | |
| mockTryCompressChat.mockResolvedValue(compressedResult); | |
| await compressCommand.action!(context, ''); | |
| await new Promise((r) => setTimeout(r, 0)); | |
| expect(context.ui.setPendingItem).toHaveBeenNthCalledWith(1, { | |
| type: MessageType.COMPRESSION, | |
| compression: { | |
| isPending: true, | |
| compressionStatus: null, | |
| originalTokenCount: null, | |
| newTokenCount: null, | |
| }, | |
| }); | |
| expect(mockTryCompressChat).toHaveBeenCalledWith( | |
| expect.stringMatching(/^compress-\d+$/), | |
| true, | |
| ); | |
| expect(context.ui.addItem).toHaveBeenCalledWith( | |
| { | |
| type: MessageType.COMPRESSION, | |
| compression: { | |
| isPending: false, | |
| compressionStatus: CompressionStatus.COMPRESSED, | |
| originalTokenCount: 200, | |
| newTokenCount: 100, | |
| }, | |
| }, | |
| expect.any(Number), | |
| ); | |
| expect(context.ui.setPendingItem).toHaveBeenNthCalledWith(2, null); | |
| }); | |
| it('should add an error message if tryCompressChat returns falsy', async () => { | |
| mockTryCompressChat.mockResolvedValue(null); | |
| await compressCommand.action!(context, ''); | |
| await new Promise((r) => setTimeout(r, 0)); | |
| expect(context.ui.addItem).toHaveBeenCalledWith( | |
| expect.objectContaining({ | |
| type: MessageType.ERROR, | |
| text: 'Failed to compress chat history.', | |
| }), | |
| expect.any(Number), | |
| ); | |
| expect(context.ui.setPendingItem).toHaveBeenCalledWith(null); | |
| }); | |
| it('should add an error message if tryCompressChat throws', async () => { | |
| const error = new Error('Compression failed'); | |
| mockTryCompressChat.mockRejectedValue(error); | |
| await compressCommand.action!(context, ''); | |
| await new Promise((r) => setTimeout(r, 0)); | |
| expect(context.ui.addItem).toHaveBeenCalledWith( | |
| expect.objectContaining({ | |
| type: MessageType.ERROR, | |
| text: `Failed to compress chat history: ${error.message}`, | |
| }), | |
| expect.any(Number), | |
| ); | |
| expect(context.ui.setPendingItem).toHaveBeenCalledWith(null); | |
| }); | |
| it('should clear the pending item in a finally block', async () => { | |
| mockTryCompressChat.mockRejectedValue(new Error('some error')); | |
| await compressCommand.action!(context, ''); | |
| await new Promise((r) => setTimeout(r, 0)); | |
| expect(context.ui.setPendingItem).toHaveBeenCalledWith(null); | |
| }); | |
| describe('metadata', () => { | |
| it('should have the correct name and aliases', () => { | |
| expect(compressCommand.name).toBe('compress'); | |
| expect(compressCommand.altNames).toContain('summarize'); | |
| expect(compressCommand.altNames).toContain('compact'); | |
| }); | |
| }); | |
| }); | |