Skip to content

Commit 1073e24

Browse files
committed
test(agent-runtime): Update test mocks to use PromptResult type
1 parent c5e6efa commit 1073e24

File tree

12 files changed

+54
-38
lines changed

12 files changed

+54
-38
lines changed

common/src/testing/fixtures/agent-runtime.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
import { mock } from 'bun:test'
2222

23+
import { promptSuccess } from '../../util/error'
24+
2325
import type { ProjectFileContext } from '../../util/file'
2426

2527
export const mockFileContext: ProjectFileContext = {
@@ -248,11 +250,11 @@ export function createTestAgentRuntimeParams(
248250
toolCallId: 'mock-id',
249251
input: {},
250252
}
251-
return 'mock-message-id'
253+
return promptSuccess('mock-message-id')
252254
}),
253-
promptAiSdk: overrides.promptAiSdk ?? mock(async () => 'Mock response'),
255+
promptAiSdk: overrides.promptAiSdk ?? mock(async () => promptSuccess('Mock response')),
254256
promptAiSdkStructured:
255-
overrides.promptAiSdkStructured ?? mock(async () => ({})),
257+
overrides.promptAiSdkStructured ?? mock(async () => promptSuccess({})),
256258
requestMcpToolData: overrides.requestMcpToolData ?? mock(async () => ({})),
257259
startAgentRun: overrides.startAgentRun ?? mock(async () => 'test-run-id'),
258260
finishAgentRun: overrides.finishAgentRun ?? mock(async () => {}),
@@ -303,10 +305,10 @@ export function createTestAgentRuntimeDeps(): Omit<
303305
toolCallId: 'mock-id',
304306
input: {},
305307
}
306-
return 'mock-message-id'
308+
return promptSuccess('mock-message-id')
307309
}),
308-
promptAiSdk: mock(async () => 'Mock response'),
309-
promptAiSdkStructured: mock(async () => ({})),
310+
promptAiSdk: mock(async () => promptSuccess('Mock response')),
311+
promptAiSdkStructured: mock(async () => promptSuccess({})),
310312
requestMcpToolData: mock(async () => ({})),
311313
startAgentRun: mock(async () => 'test-run-id'),
312314
finishAgentRun: mock(async () => {}),

packages/agent-runtime/src/__tests__/fast-rewrite.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
clearMockedModules,
77
mockModule,
88
} from '@codebuff/common/testing/mock-modules'
9+
import { promptSuccess } from '@codebuff/common/util/error'
910
import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test'
1011
import { createPatch } from 'diff'
1112

@@ -48,7 +49,7 @@ describe('rewriteWithOpenAI', () => {
4849

4950
agentRuntimeImpl.promptAiSdk = async (params: any) => {
5051
capturedPromptText = params?.messages?.[0]?.content?.[0]?.text
51-
return expectedResult.replace(/\n$/, '')
52+
return promptSuccess(expectedResult.replace(/\n$/, ''))
5253
}
5354

5455
const result = await rewriteWithOpenAI({

packages/agent-runtime/src/__tests__/loop-agent-steps.test.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from '@codebuff/common/testing/mock-modules'
77
import { setupDbSpies } from '@codebuff/common/testing/mocks/database'
88
import { getInitialSessionState } from '@codebuff/common/types/session-state'
9+
import { promptSuccess } from '@codebuff/common/util/error'
910
import { assistantMessage, userMessage } from '@codebuff/common/util/messages'
1011
import db from '@codebuff/internal/db'
1112
import {
@@ -67,7 +68,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
6768
llmCallCount++
6869
yield { type: 'text' as const, text: 'LLM response\n\n' }
6970
yield createToolCallChunk('end_turn', {})
70-
return 'mock-message-id'
71+
return promptSuccess('mock-message-id')
7172
})
7273

7374
// Mock analytics
@@ -486,7 +487,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
486487
// LLM always tries to end turn
487488
yield { type: 'text' as const, text: 'LLM response\n\n' }
488489
yield createToolCallChunk('end_turn', {})
489-
return `mock-message-id-${promptCallCount}`
490+
return promptSuccess(`mock-message-id-${promptCallCount}`)
490491
}
491492

492493
await loopAgentSteps({
@@ -558,7 +559,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
558559
yield { type: 'text' as const, text: 'Ending\n\n' }
559560
yield createToolCallChunk('end_turn', {})
560561
}
561-
return 'mock-message-id'
562+
return promptSuccess('mock-message-id')
562563
}
563564

564565
mockAgentState.output = undefined
@@ -621,7 +622,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
621622
yield createToolCallChunk('set_output', { result: 'success' })
622623
yield { type: 'text' as const, text: '\n\n' }
623624
yield createToolCallChunk('end_turn', {})
624-
return 'mock-message-id'
625+
return promptSuccess('mock-message-id')
625626
}
626627

627628
mockAgentState.output = undefined
@@ -659,13 +660,13 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
659660
// Mock promptAiSdk to capture the n parameter
660661
loopAgentStepsBaseParams.promptAiSdk = async (params: any) => {
661662
agentStepN = params.n
662-
return JSON.stringify([
663+
return promptSuccess(JSON.stringify([
663664
'Response 1',
664665
'Response 2',
665666
'Response 3',
666667
'Response 4',
667668
'Response 5',
668-
])
669+
]))
669670
}
670671

671672
await loopAgentSteps({
@@ -705,7 +706,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
705706
'Implementation C',
706707
]
707708
loopAgentStepsBaseParams.promptAiSdk = async () => {
708-
return JSON.stringify(expectedResponses)
709+
return promptSuccess(JSON.stringify(expectedResponses))
709710
}
710711

711712
await loopAgentSteps({
@@ -735,7 +736,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
735736
llmCallNumber++
736737
yield { type: 'text' as const, text: 'Response without output\n\n' }
737738
yield createToolCallChunk('end_turn', {})
738-
return 'mock-message-id'
739+
return promptSuccess('mock-message-id')
739740
}
740741

741742
const result = await loopAgentSteps({
@@ -788,7 +789,7 @@ describe('loopAgentSteps - runAgentStep vs runProgrammaticStep behavior', () =>
788789
yield { type: 'text' as const, text: '\n\n' }
789790
yield createToolCallChunk('end_turn', {})
790791
}
791-
return 'mock-message-id'
792+
return promptSuccess('mock-message-id')
792793
}
793794

794795
mockAgentState.output = undefined

packages/agent-runtime/src/__tests__/prompt-caching-subagents.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { TEST_USER_ID } from '@codebuff/common/old-constants'
22
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
33
import { getInitialSessionState } from '@codebuff/common/types/session-state'
4+
import { promptSuccess } from '@codebuff/common/util/error'
45
import { assistantMessage, userMessage } from '@codebuff/common/util/messages'
56
import { beforeEach, describe, expect, it } from 'bun:test'
67

@@ -107,7 +108,7 @@ describe('Prompt Caching for Subagents with inheritParentSystemPrompt', () => {
107108
await options.onCostCalculated(1)
108109
}
109110

110-
return 'mock-message-id'
111+
return promptSuccess('mock-message-id')
111112
},
112113
// Mock file operations
113114
requestFiles: async ({ filePaths }) => {

packages/agent-runtime/src/__tests__/read-docs-tool.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as analytics from '@codebuff/common/analytics'
22
import { TEST_USER_ID } from '@codebuff/common/old-constants'
33
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
44
import { getInitialSessionState } from '@codebuff/common/types/session-state'
5+
import { promptSuccess } from '@codebuff/common/util/error'
56
import {
67
afterEach,
78

@@ -38,7 +39,7 @@ function mockAgentStream(chunks: StreamChunk[]) {
3839
for (const chunk of chunks) {
3940
yield chunk
4041
}
41-
return 'mock-message-id'
42+
return promptSuccess('mock-message-id')
4243
}
4344
agentRuntimeImpl.promptAiSdkStream = mockPromptAiSdkStream
4445
runAgentStepBaseParams.promptAiSdkStream = mockPromptAiSdkStream

packages/agent-runtime/src/__tests__/run-agent-step-tools.test.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { TEST_USER_ID } from '@codebuff/common/old-constants'
33
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
44
import { setupDbSpies } from '@codebuff/common/testing/mocks/database'
55
import { getInitialSessionState } from '@codebuff/common/types/session-state'
6+
import { promptSuccess } from '@codebuff/common/util/error'
67
import { assistantMessage, userMessage } from '@codebuff/common/util/messages'
78
import db from '@codebuff/internal/db'
89
import {
@@ -96,7 +97,7 @@ describe('runAgentStep - set_output tool', () => {
9697

9798
// Mock LLM APIs
9899
agentRuntimeImpl.promptAiSdk = async function () {
99-
return 'Test response'
100+
return promptSuccess('Test response')
100101
}
101102
clearAgentGeneratorCache(agentRuntimeImpl)
102103

@@ -161,7 +162,7 @@ describe('runAgentStep - set_output tool', () => {
161162
yield createToolCallChunk('set_output', { message: 'Hi' })
162163
yield { type: 'text' as const, text: '\n\n' }
163164
yield createToolCallChunk('end_turn', {})
164-
return 'mock-message-id'
165+
return promptSuccess('mock-message-id')
165166
}
166167

167168
const sessionState = getInitialSessionState(mockFileContext)
@@ -193,7 +194,7 @@ describe('runAgentStep - set_output tool', () => {
193194
findings: ['Bug in auth.ts', 'Missing validation'],
194195
})
195196
yield createToolCallChunk('end_turn', {})
196-
return 'mock-message-id'
197+
return promptSuccess('mock-message-id')
197198
}
198199

199200
const sessionState = getInitialSessionState(mockFileContext)
@@ -226,7 +227,7 @@ describe('runAgentStep - set_output tool', () => {
226227
existingField: 'updated value',
227228
})
228229
yield createToolCallChunk('end_turn', {})
229-
return 'mock-message-id'
230+
return promptSuccess('mock-message-id')
230231
}
231232

232233
const sessionState = getInitialSessionState(mockFileContext)
@@ -259,7 +260,7 @@ describe('runAgentStep - set_output tool', () => {
259260
runAgentStepBaseParams.promptAiSdkStream = async function* ({}) {
260261
yield createToolCallChunk('set_output', {})
261262
yield createToolCallChunk('end_turn', {})
262-
return 'mock-message-id'
263+
return promptSuccess('mock-message-id')
263264
}
264265

265266
const sessionState = getInitialSessionState(mockFileContext)
@@ -331,7 +332,7 @@ describe('runAgentStep - set_output tool', () => {
331332
// Mock the LLM stream to return a response that doesn't end the turn
332333
runAgentStepBaseParams.promptAiSdkStream = async function* ({}) {
333334
yield { type: 'text' as const, text: 'Continuing with the analysis...' } // Non-empty response, no tool calls
334-
return 'mock-message-id'
335+
return promptSuccess('mock-message-id')
335336
}
336337

337338
const sessionState = getInitialSessionState(mockFileContext)
@@ -475,7 +476,7 @@ describe('runAgentStep - set_output tool', () => {
475476
agent_type: 'message-deleter-agent',
476477
prompt: 'Delete the last two assistant messages',
477478
})
478-
return 'mock-message-id'
479+
return promptSuccess('mock-message-id')
479480
}
480481

481482
const sessionState = getInitialSessionState(mockFileContext)

packages/agent-runtime/src/__tests__/test-utils.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { promptSuccess } from '@codebuff/common/util/error'
12
import { generateCompactId } from '@codebuff/common/util/string'
23

34
import type { StreamChunk } from '@codebuff/common/types/contracts/llm'
5+
import type { PromptResult } from '@codebuff/common/util/error'
46
import type { ProjectFileContext } from '@codebuff/common/util/file'
57

68
/**
@@ -26,16 +28,19 @@ export function createToolCallChunk<T extends string>(
2628
*/
2729
export function createMockStreamWithToolCalls(
2830
chunks: (string | { toolName: string; input: Record<string, unknown> })[],
29-
): AsyncGenerator<StreamChunk, string | null> {
30-
async function* generator(): AsyncGenerator<StreamChunk, string | null> {
31+
): AsyncGenerator<StreamChunk, PromptResult<string | null>> {
32+
async function* generator(): AsyncGenerator<
33+
StreamChunk,
34+
PromptResult<string | null>
35+
> {
3136
for (const chunk of chunks) {
3237
if (typeof chunk === 'string') {
3338
yield { type: 'text' as const, text: chunk }
3439
} else {
3540
yield createToolCallChunk(chunk.toolName, chunk.input)
3641
}
3742
}
38-
return 'mock-message-id'
43+
return promptSuccess('mock-message-id')
3944
}
4045
return generator()
4146
}

packages/agent-runtime/src/__tests__/tool-stream-parser.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
2+
import { promptSuccess } from '@codebuff/common/util/error'
23
import { beforeEach, describe, expect, it } from 'bun:test'
34

45
import { processStreamWithTools } from '../tool-stream-parser'
@@ -13,7 +14,7 @@ describe('processStreamWithTags', () => {
1314
yield chunk
1415
}
1516

16-
return 'mock-message-id'
17+
return promptSuccess('mock-message-id')
1718
}
1819

1920
function textChunk(text: string): StreamChunk {

packages/agent-runtime/src/__tests__/tool-validation-error.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
22
import { getInitialSessionState } from '@codebuff/common/types/session-state'
3+
import { promptSuccess } from '@codebuff/common/util/error'
34
import { beforeEach, describe, expect, it } from 'bun:test'
45

56
import { mockFileContext } from './test-utils'
@@ -49,9 +50,9 @@ describe('tool validation error handling', () => {
4950
},
5051
}
5152

52-
async function* mockStream(): AsyncGenerator<StreamChunk, string | null> {
53+
async function* mockStream() {
5354
yield invalidToolCallChunk
54-
return 'mock-message-id'
55+
return promptSuccess('mock-message-id')
5556
}
5657

5758
const sessionState = getInitialSessionState(mockFileContext)
@@ -158,9 +159,9 @@ describe('tool validation error handling', () => {
158159
},
159160
}
160161

161-
async function* mockStream(): AsyncGenerator<StreamChunk, string | null> {
162+
async function* mockStream() {
162163
yield validToolCallChunk
163-
return 'mock-message-id'
164+
return promptSuccess('mock-message-id')
164165
}
165166

166167
const sessionState = getInitialSessionState(mockFileContext)

packages/agent-runtime/src/__tests__/web-search-tool.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as analytics from '@codebuff/common/analytics'
22
import { TEST_USER_ID } from '@codebuff/common/old-constants'
33
import { TEST_AGENT_RUNTIME_IMPL } from '@codebuff/common/testing/impl/agent-runtime'
44
import { getInitialSessionState } from '@codebuff/common/types/session-state'
5-
import { success } from '@codebuff/common/util/error'
5+
import { promptSuccess, success } from '@codebuff/common/util/error'
66
import {
77
afterEach,
88

@@ -38,7 +38,7 @@ function mockAgentStream(chunks: StreamChunk[]) {
3838
for (const chunk of chunks) {
3939
yield chunk
4040
}
41-
return 'mock-message-id'
41+
return promptSuccess('mock-message-id')
4242
}
4343
}
4444

@@ -83,7 +83,7 @@ describe('web_search tool with researcher agent (via web API facade)', () => {
8383

8484
// Mock LLM APIs
8585
runAgentStepBaseParams.promptAiSdk = async function () {
86-
return 'Test response'
86+
return promptSuccess('Test response')
8787
}
8888
})
8989

0 commit comments

Comments
 (0)