Skip to content

Commit fb95969

Browse files
committed
test(proxy): cover previous_response_id chaining and rejection
1 parent a7debe6 commit fb95969

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

‎tests/app.test.js‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2222,4 +2222,54 @@ describe('Proxy OpenAI API', () => {
22222222
expect(res.body.choices[0].message.content).toBe('Recovered response');
22232223
expect(sdkMocks.sessionDelete).toHaveBeenCalledWith({ path: { id: 'test-session-id' } });
22242224
});
2225+
describe('Proxy Responses API previous_response_id', () => {
2226+
test('chains follow-up turns onto the stored session without recreating it', async () => {
2227+
sdkMocks.sessionMessages.mockReset();
2228+
sdkMocks.sessionMessages.mockResolvedValue([
2229+
{
2230+
info: { role: 'assistant', finish: 'stop' },
2231+
parts: [{ type: 'text', text: 'Mock response' }]
2232+
}
2233+
]);
2234+
sdkMocks.eventSubscribe.mockReset();
2235+
sdkMocks.sessionCreate.mockClear();
2236+
sdkMocks.sessionDelete.mockClear();
2237+
sdkMocks.configUpdate.mockClear();
2238+
2239+
const first = await request(app)
2240+
.post('/v1/responses')
2241+
.set('Authorization', 'Bearer test-key')
2242+
.send({ model: 'opencode/kimi-k2.5', input: 'Hello' });
2243+
2244+
expect(first.statusCode).toEqual(200);
2245+
expect(first.body.id).toMatch(/^resp_/);
2246+
expect(sdkMocks.sessionCreate).toHaveBeenCalledTimes(1);
2247+
2248+
const followUp = await request(app)
2249+
.post('/v1/responses')
2250+
.set('Authorization', 'Bearer test-key')
2251+
.send({
2252+
input: 'And a follow-up question',
2253+
previous_response_id: first.body.id
2254+
});
2255+
2256+
expect(followUp.statusCode).toEqual(200);
2257+
// The stored OpenCode session is reused; no new session, no teardown.
2258+
expect(sdkMocks.sessionCreate).toHaveBeenCalledTimes(1);
2259+
expect(sdkMocks.sessionDelete).not.toHaveBeenCalled();
2260+
// Model falls back to the one recorded with the previous response.
2261+
const lastUpdate = sdkMocks.configUpdate.mock.calls.at(-1)?.[0];
2262+
expect(lastUpdate?.body?.activeModel).toEqual({ providerID: 'opencode', modelID: 'kimi-k2.5' });
2263+
});
2264+
2265+
test('rejects an invalid previous_response_id', async () => {
2266+
const res = await request(app)
2267+
.post('/v1/responses')
2268+
.set('Authorization', 'Bearer test-key')
2269+
.send({ input: 'Hello', previous_response_id: 'resp_does-not-exist' });
2270+
2271+
expect(res.statusCode).toEqual(400);
2272+
expect(res.body.error.message).toContain('previous_response_id');
2273+
});
22252274
});
2275+
});

0 commit comments

Comments
 (0)