From 05a49702d888bee912682f78c3993d98f7f9d628 Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Wed, 28 May 2025 18:17:19 +0000 Subject: Refactor: Add GeminiRespondingSpinner to make use of streamingState idiomatic (#583) --- .../src/ui/components/LoadingIndicator.test.tsx | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'packages/cli/src/ui/components/LoadingIndicator.test.tsx') diff --git a/packages/cli/src/ui/components/LoadingIndicator.test.tsx b/packages/cli/src/ui/components/LoadingIndicator.test.tsx index a03fb230..c74003e4 100644 --- a/packages/cli/src/ui/components/LoadingIndicator.test.tsx +++ b/packages/cli/src/ui/components/LoadingIndicator.test.tsx @@ -15,9 +15,21 @@ import { import { StreamingState } from '../types.js'; import { vi } from 'vitest'; -// Mock ink-spinner -vi.mock('ink-spinner', () => ({ - default: () => MockSpinner, +// Mock GeminiRespondingSpinner +vi.mock('./GeminiRespondingSpinner.js', () => ({ + GeminiRespondingSpinner: ({ + nonRespondingDisplay, + }: { + nonRespondingDisplay?: string; + }) => { + const { streamingState } = React.useContext(StreamingContext)!; + if (streamingState === StreamingState.Responding) { + return MockRespondingSpinner; + } else if (nonRespondingDisplay) { + return {nonRespondingDisplay}; + } + return null; + }, })); const renderWithContext = ( @@ -54,12 +66,12 @@ describe('', () => { StreamingState.Responding, ); const output = lastFrame(); - expect(output).toContain('MockSpinner'); + expect(output).toContain('MockRespondingSpinner'); expect(output).toContain('Loading...'); expect(output).toContain('(esc to cancel, 5s)'); }); - it('should render phrase and time but no spinner when streamingState is WaitingForConfirmation', () => { + it('should render spinner (static), phrase but no time/cancel when streamingState is WaitingForConfirmation', () => { const props = { currentLoadingPhrase: 'Confirm action', elapsedTime: 10, @@ -69,7 +81,7 @@ describe('', () => { StreamingState.WaitingForConfirmation, ); const output = lastFrame(); - expect(output).not.toContain('MockSpinner'); + expect(output).toContain('⠏'); // Static char for WaitingForConfirmation expect(output).toContain('Confirm action'); expect(output).not.toContain('(esc to cancel)'); expect(output).not.toContain(', 10s'); @@ -127,7 +139,7 @@ describe('', () => { , ); let output = lastFrame(); - expect(output).toContain('MockSpinner'); + expect(output).toContain('MockRespondingSpinner'); expect(output).toContain('Now Responding'); expect(output).toContain('(esc to cancel, 2s)'); @@ -143,7 +155,7 @@ describe('', () => { , ); output = lastFrame(); - expect(output).not.toContain('MockSpinner'); + expect(output).toContain('⠏'); expect(output).toContain('Please Confirm'); expect(output).not.toContain('(esc to cancel)'); expect(output).not.toContain(', 15s'); -- cgit v1.2.3