Files
docker-agent/pkg/session/openai_test.go
T
David Gageot a3ce461e9b feat(openai): add cache diagnostics, preserve_reasoning, and native_tool_search provider opts
Surface prompt cache diagnostics from Responses API results, let agents
opt into carrying reasoning state across turns, and use OpenAI's hosted
tool search for deferred tools instead of the local catalog lookup.

Assisted-By: cagent
2026-09-17 21:22:40 +02:00

38 lines
1.3 KiB
Go

package session
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/docker/docker-agent/pkg/chat"
)
func TestOpenAIResponseStatePersistence(t *testing.T) {
t.Parallel()
store := openMemoryStore(t)
sess := New(WithTitle("state"))
require.NoError(t, store.AddSession(t.Context(), sess))
state := &chat.OpenAIResponse{
ID: "resp_1", Source: "openai/gpt-5.6", SessionID: sess.ID,
Output: []json.RawMessage{json.RawMessage(`{"type":"reasoning","id":"rs_1","summary":[],"encrypted_content":"opaque"}`)},
}
message := &Message{Message: chat.Message{Role: chat.MessageRoleAssistant, Content: "done", OpenAIResponse: state}}
_, err := store.AddMessage(t.Context(), sess.ID, message)
require.NoError(t, err)
got, err := store.GetSession(t.Context(), sess.ID)
require.NoError(t, err)
require.Len(t, got.Messages, 1)
restored := got.Messages[0].Message.Message.OpenAIResponse
require.NotNil(t, restored)
assert.Equal(t, state, restored)
clone := cloneChatMessage(message.Message)
clone.OpenAIResponse.ID = "another"
clone.OpenAIResponse.Output[0][0] = '['
assert.Equal(t, "resp_1", state.ID)
assert.Equal(t, byte('{'), state.Output[0][0], "snapshot must not alias opaque output bytes")
}