2026-02-04 22:29:26 -08:00
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { render } from '../../../test-utils/render.js' ;
import { Card } from './Card.js' ;
import { Text } from 'ink' ;
import { describe , it , expect } from 'vitest' ;
2026-02-05 15:37:24 -08:00
import { ToolCallStatus } from '../../types.js' ;
2026-02-04 22:29:26 -08:00
describe ( 'Card' , ( ) = > {
it . each ( [
{
2026-02-05 15:37:24 -08:00
status : ToolCallStatus.Pending ,
2026-02-04 22:29:26 -08:00
title : 'Gemini CLI update available' ,
suffix : '0.26.0 → 0.27.0' ,
prefix : true ,
body : 'Installed via Homebrew. Please update with "brew upgrade gemini-cli".' ,
} ,
{
2026-02-05 15:37:24 -08:00
status : ToolCallStatus.Canceled ,
2026-02-04 22:29:26 -08:00
title : 'Delegate to agent' ,
suffix : "Delegating to agent 'cli_help'" ,
prefix : true ,
body : '🤖💭 Execution limit reached (ERROR_NO_COMPLETE_TASK_CALL). Attempting one final recovery turn with a grace period.' ,
} ,
{
2026-02-05 15:37:24 -08:00
status : ToolCallStatus.Error ,
2026-02-04 22:29:26 -08:00
title : 'Error' ,
suffix : '429 You exceeded your current quota' ,
prefix : true ,
body : 'Go to https://aistudio.google.com/apikey to upgrade your quota tier, or submit a quota increase request in https://ai.google.dev/gemini-api/docs/rate-limits' ,
} ,
{
2026-02-05 15:37:24 -08:00
status : ToolCallStatus.Confirming ,
2026-02-04 22:29:26 -08:00
title : 'Shell' ,
suffix : 'node -v && which gemini' ,
prefix : true ,
body : "ls /usr/local/bin | grep 'xattr'" ,
} ,
{
2026-02-05 15:37:24 -08:00
status : ToolCallStatus.Success ,
2026-02-04 22:29:26 -08:00
title : 'ReadFolder' ,
suffix : '/usr/local/bin' ,
prefix : true ,
body : 'Listed 39 item(s).' ,
} ,
2026-02-05 11:07:19 -08:00
] as const ) (
2026-02-05 15:37:24 -08:00
'renders a $status card with prefix=$prefix' ,
( { status , title , suffix , prefix , body } ) = > {
2026-02-04 22:29:26 -08:00
const { lastFrame } = render (
2026-02-05 15:37:24 -08:00
< Card status = { status } title = { title } suffix = { suffix } prefix = { prefix } >
2026-02-04 22:29:26 -08:00
< Text > { body } < / Text >
< / Card > ,
) ;
const output = lastFrame ( ) ;
expect ( output ) . toMatchSnapshot ( ) ;
} ,
) ;
} ) ;