| | |
| | |
| | |
| | |
| | |
| |
|
| | import { render } from 'ink-testing-library'; |
| | import { describe, it, expect } from 'vitest'; |
| | import { |
| | StatRow, |
| | StatsColumn, |
| | DurationColumn, |
| | FormattedStats, |
| | } from './Stats.js'; |
| | import { Colors } from '../colors.js'; |
| |
|
| | describe('<StatRow />', () => { |
| | it('renders a label and value', () => { |
| | const { lastFrame } = render( |
| | <StatRow label="Test Label" value="Test Value" />, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| |
|
| | it('renders with a specific value color', () => { |
| | const { lastFrame } = render( |
| | <StatRow |
| | label="Test Label" |
| | value="Test Value" |
| | valueColor={Colors.AccentGreen} |
| | />, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| | }); |
| |
|
| | describe('<StatsColumn />', () => { |
| | const mockStats: FormattedStats = { |
| | inputTokens: 100, |
| | outputTokens: 200, |
| | toolUseTokens: 50, |
| | thoughtsTokens: 25, |
| | cachedTokens: 10, |
| | totalTokens: 385, |
| | }; |
| |
|
| | it('renders a stats column with children', () => { |
| | const { lastFrame } = render( |
| | <StatsColumn title="Test Stats" stats={mockStats}> |
| | <StatRow label="Child Prop" value="Child Value" /> |
| | </StatsColumn>, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| |
|
| | it('renders a stats column with a specific width', () => { |
| | const { lastFrame } = render( |
| | <StatsColumn title="Test Stats" stats={mockStats} width="50%" />, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| |
|
| | it('renders a cumulative stats column with percentages', () => { |
| | const { lastFrame } = render( |
| | <StatsColumn title="Cumulative Stats" stats={mockStats} isCumulative />, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| |
|
| | it('hides the tool use row when there are no tool use tokens', () => { |
| | const statsWithNoToolUse: FormattedStats = { |
| | ...mockStats, |
| | toolUseTokens: 0, |
| | }; |
| | const { lastFrame } = render( |
| | <StatsColumn title="Test Stats" stats={statsWithNoToolUse} />, |
| | ); |
| | expect(lastFrame()).not.toContain('Tool Use Tokens'); |
| | }); |
| | }); |
| |
|
| | describe('<DurationColumn />', () => { |
| | it('renders a duration column', () => { |
| | const { lastFrame } = render( |
| | <DurationColumn apiTime="5s" wallTime="10s" />, |
| | ); |
| | expect(lastFrame()).toMatchSnapshot(); |
| | }); |
| | }); |
| |
|