diff --git a/mobile/src/session/mobile-native-chat-turn-disclosure-test-harness.ts b/mobile/src/session/mobile-native-chat-turn-disclosure-test-harness.ts new file mode 100644 index 000000000000..ac1799d0b75d --- /dev/null +++ b/mobile/src/session/mobile-native-chat-turn-disclosure-test-harness.ts @@ -0,0 +1,40 @@ +import { createElement } from 'react' +import type { NativeChatMessage } from '../../../src/shared/native-chat-types' +import type { NativeChatTurnJournal } from '../../../src/shared/native-chat-turn-membership' +import type { NativeChatSettledTurns } from '../../../src/shared/native-chat-turn-status' +import { useMobileNativeChatTurnDisclosure } from './use-mobile-native-chat-turn-disclosure' + +export function MobileNativeChatTurnDisclosureHarness({ + messages, + enabled, + isWorking = true, + settledTurns, + turnJournal, + workingStartedAt, + thinking, + lineYields, + scopeKey = 'host\0worktree\0tab-a' +}: { + messages: readonly NativeChatMessage[] + enabled: boolean + isWorking?: boolean + settledTurns?: NativeChatSettledTurns + turnJournal?: NativeChatTurnJournal + workingStartedAt?: number | null + thinking?: boolean + lineYields?: boolean + scopeKey?: string +}): React.JSX.Element { + const disclosure = useMobileNativeChatTurnDisclosure({ + messages, + enabled, + isWorking, + settledTurns, + turnJournal, + workingStartedAt, + thinking, + lineYields, + scopeKey + }) + return createElement('result', { disclosure }) +} diff --git a/mobile/src/session/use-mobile-native-chat-turn-disclosure.test.tsx b/mobile/src/session/use-mobile-native-chat-turn-disclosure.test.tsx index 766190a6bf07..51a5a1b483b2 100644 --- a/mobile/src/session/use-mobile-native-chat-turn-disclosure.test.tsx +++ b/mobile/src/session/use-mobile-native-chat-turn-disclosure.test.tsx @@ -9,7 +9,7 @@ import type { import { agentJournalSubmissionKey } from '../../../src/shared/agent-session-journal-item-key' import type { NativeChatMessage } from '../../../src/shared/native-chat-types' import type { NativeChatTurnJournal } from '../../../src/shared/native-chat-turn-membership' -import type { NativeChatSettledTurns } from '../../../src/shared/native-chat-turn-status' +import { MobileNativeChatTurnDisclosureHarness as Harness } from './mobile-native-chat-turn-disclosure-test-harness' import { useMobileNativeChatTurnDisclosure } from './use-mobile-native-chat-turn-disclosure' function userMessage(id: string): NativeChatMessage { @@ -22,41 +22,6 @@ function userMessage(id: string): NativeChatMessage { } } -function Harness({ - messages, - enabled, - isWorking = true, - settledTurns, - turnJournal, - workingStartedAt, - thinking, - lineYields, - scopeKey = 'host\0worktree\0tab-a' -}: { - messages: readonly NativeChatMessage[] - enabled: boolean - isWorking?: boolean - settledTurns?: NativeChatSettledTurns - turnJournal?: NativeChatTurnJournal - workingStartedAt?: number | null - thinking?: boolean - lineYields?: boolean - scopeKey?: string -}): React.JSX.Element { - const disclosure = useMobileNativeChatTurnDisclosure({ - messages, - enabled, - isWorking, - settledTurns, - turnJournal, - workingStartedAt, - thinking, - lineYields, - scopeKey - }) - return createElement('result', { disclosure }) -} - describe('useMobileNativeChatTurnDisclosure', () => { let renderer: ReactTestRenderer | null = null diff --git a/src/shared/structured-agent-session-live-turn.test.ts b/src/shared/structured-agent-session-live-turn.test.ts index 5a4d1f7d43c8..389e6b2aff38 100644 --- a/src/shared/structured-agent-session-live-turn.test.ts +++ b/src/shared/structured-agent-session-live-turn.test.ts @@ -39,9 +39,13 @@ describe('isStructuredAgentSessionThinking', () => { state, ...(state === 'completed' ? { completedAt: 3 } : {}) }) - expect(isStructuredAgentSessionThinking([turnStart, withState('running')])).toBe(true) + expect(isStructuredAgentSessionThinking({ items: [turnStart, withState('running')] })).toBe( + true + ) // Ended reasoning stays the newest row while Claude streams a tool's input after it. - expect(isStructuredAgentSessionThinking([turnStart, withState('completed')])).toBe(false) + expect(isStructuredAgentSessionThinking({ items: [turnStart, withState('completed')] })).toBe( + false + ) }) it('is false once a tool call, a message or a diff lands after the reasoning', () => {