diff options
Diffstat (limited to 'packages/cli/src/ui/commands/quitCommand.test.ts')
| -rw-r--r-- | packages/cli/src/ui/commands/quitCommand.test.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/cli/src/ui/commands/quitCommand.test.ts b/packages/cli/src/ui/commands/quitCommand.test.ts new file mode 100644 index 00000000..e67723fd --- /dev/null +++ b/packages/cli/src/ui/commands/quitCommand.test.ts @@ -0,0 +1,55 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest'; +import { quitCommand } from './quitCommand.js'; +import { createMockCommandContext } from '../../test-utils/mockCommandContext.js'; +import { formatDuration } from '../utils/formatters.js'; + +vi.mock('../utils/formatters.js'); + +describe('quitCommand', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2025-01-01T01:00:00Z')); + vi.mocked(formatDuration).mockReturnValue('1h 0m 0s'); + }); + + afterEach(() => { + vi.useRealTimers(); + vi.clearAllMocks(); + }); + + it('returns a QuitActionReturn object with the correct messages', () => { + const mockContext = createMockCommandContext({ + session: { + stats: { + sessionStartTime: new Date('2025-01-01T00:00:00Z'), + }, + }, + }); + + if (!quitCommand.action) throw new Error('Action is not defined'); + const result = quitCommand.action(mockContext, 'quit'); + + expect(formatDuration).toHaveBeenCalledWith(3600000); // 1 hour in ms + expect(result).toEqual({ + type: 'quit', + messages: [ + { + type: 'user', + text: '/quit', + id: expect.any(Number), + }, + { + type: 'quit', + duration: '1h 0m 0s', + id: expect.any(Number), + }, + ], + }); + }); +}); |
