mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-06-26 11:17:04 -07:00
@@ -29,6 +29,7 @@ describe('useMessageQueue', () => {
|
||||
streamingState: StreamingState;
|
||||
submitQuery: (query: string) => void;
|
||||
isMcpReady: boolean;
|
||||
isCompressing?: boolean;
|
||||
}) => {
|
||||
let hookResult: ReturnType<typeof useMessageQueue>;
|
||||
function TestComponent(props: typeof initialProps) {
|
||||
@@ -402,4 +403,52 @@ describe('useMessageQueue', () => {
|
||||
expect(result.current.messageQueue).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isCompressing logic', () => {
|
||||
it('should not auto-submit when isCompressing is true, even if streamingState is Idle', async () => {
|
||||
const { result } = await renderMessageQueueHook({
|
||||
isConfigInitialized: true,
|
||||
streamingState: StreamingState.Idle,
|
||||
submitQuery: mockSubmitQuery,
|
||||
isMcpReady: true,
|
||||
isCompressing: true,
|
||||
});
|
||||
|
||||
// Add messages
|
||||
act(() => {
|
||||
result.current.addMessage('Compression message');
|
||||
});
|
||||
|
||||
expect(mockSubmitQuery).not.toHaveBeenCalled();
|
||||
expect(result.current.messageQueue).toEqual(['Compression message']);
|
||||
});
|
||||
|
||||
it('should auto-submit queued messages when isCompressing becomes false', async () => {
|
||||
const { result, rerender } = await renderMessageQueueHook({
|
||||
isConfigInitialized: true,
|
||||
streamingState: StreamingState.Idle,
|
||||
submitQuery: mockSubmitQuery,
|
||||
isMcpReady: true,
|
||||
isCompressing: true,
|
||||
});
|
||||
|
||||
// Add messages
|
||||
act(() => {
|
||||
result.current.addMessage('Pending compression message 1');
|
||||
result.current.addMessage('Pending compression message 2');
|
||||
});
|
||||
|
||||
expect(mockSubmitQuery).not.toHaveBeenCalled();
|
||||
|
||||
// Transition isCompressing to false
|
||||
rerender({ isCompressing: false });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockSubmitQuery).toHaveBeenCalledWith(
|
||||
'Pending compression message 1\n\nPending compression message 2',
|
||||
);
|
||||
expect(result.current.messageQueue).toEqual([]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -12,6 +12,7 @@ export interface UseMessageQueueOptions {
|
||||
streamingState: StreamingState;
|
||||
submitQuery: (query: string) => void;
|
||||
isMcpReady: boolean;
|
||||
isCompressing?: boolean;
|
||||
}
|
||||
|
||||
export interface UseMessageQueueReturn {
|
||||
@@ -32,6 +33,7 @@ export function useMessageQueue({
|
||||
streamingState,
|
||||
submitQuery,
|
||||
isMcpReady,
|
||||
isCompressing = false,
|
||||
}: UseMessageQueueOptions): UseMessageQueueReturn {
|
||||
const [messageQueue, setMessageQueue] = useState<string[]>([]);
|
||||
|
||||
@@ -69,6 +71,7 @@ export function useMessageQueue({
|
||||
if (
|
||||
isConfigInitialized &&
|
||||
streamingState === StreamingState.Idle &&
|
||||
!isCompressing &&
|
||||
isMcpReady &&
|
||||
messageQueue.length > 0
|
||||
) {
|
||||
@@ -84,6 +87,7 @@ export function useMessageQueue({
|
||||
isMcpReady,
|
||||
messageQueue,
|
||||
submitQuery,
|
||||
isCompressing,
|
||||
]);
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user