openai_codex_transform_additions_test.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package service
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. // ensureCodexReasoningInclude:带 reasoning 时补齐 include,幂等且保留既有项。
  8. func TestEnsureCodexReasoningInclude(t *testing.T) {
  9. // reasoning 存在、include 缺失 → 注入
  10. body := map[string]any{"reasoning": map[string]any{"effort": "medium"}}
  11. require.True(t, ensureCodexReasoningInclude(body))
  12. require.Equal(t, []any{"reasoning.encrypted_content"}, body["include"])
  13. // 幂等:再次调用不重复
  14. require.False(t, ensureCodexReasoningInclude(body))
  15. // 无 reasoning → 不动
  16. body2 := map[string]any{}
  17. require.False(t, ensureCodexReasoningInclude(body2))
  18. _, ok := body2["include"]
  19. require.False(t, ok)
  20. // 既有 include 保留并追加
  21. body3 := map[string]any{
  22. "reasoning": map[string]any{"effort": "high"},
  23. "include": []any{"foo"},
  24. }
  25. require.True(t, ensureCodexReasoningInclude(body3))
  26. require.Equal(t, []any{"foo", "reasoning.encrypted_content"}, body3["include"])
  27. }
  28. // applyCodexClientMetadata:用账号真实 device_id 注入 installation 标识,幂等、不覆盖既有项、不伪造。
  29. func TestApplyCodexClientMetadata(t *testing.T) {
  30. // 仅 OpenAI OAuth 账号才有 device_id(GetOpenAIDeviceID 的门控)。
  31. acc := &Account{Platform: PlatformOpenAI, Type: AccountTypeOAuth, Extra: map[string]any{"openai_device_id": "dev-xyz"}}
  32. body := map[string]any{}
  33. require.True(t, applyCodexClientMetadata(body, acc))
  34. cm, ok := body["client_metadata"].(map[string]any)
  35. require.True(t, ok)
  36. require.Equal(t, "dev-xyz", cm["x-codex-installation-id"])
  37. // 幂等
  38. require.False(t, applyCodexClientMetadata(body, acc))
  39. // OAuth 账号但无 device_id → 不写入(不伪造)
  40. body2 := map[string]any{}
  41. require.False(t, applyCodexClientMetadata(body2, &Account{Platform: PlatformOpenAI, Type: AccountTypeOAuth}))
  42. _, ok = body2["client_metadata"]
  43. require.False(t, ok)
  44. // 既有 client_metadata(如 turn metadata)保留,仅补 installation 键
  45. body3 := map[string]any{"client_metadata": map[string]any{"x-codex-turn-metadata": "t"}}
  46. require.True(t, applyCodexClientMetadata(body3, acc))
  47. cm3, _ := body3["client_metadata"].(map[string]any)
  48. require.Equal(t, "t", cm3["x-codex-turn-metadata"])
  49. require.Equal(t, "dev-xyz", cm3["x-codex-installation-id"])
  50. }
  51. // defaultCodexSynthInstructions:按模型选用真实 Codex base prompt。
  52. func TestDefaultCodexSynthInstructionsModelAware(t *testing.T) {
  53. require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5-codex"), "You are Codex, based on GPT-5"))
  54. require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.5"), "You are Codex, a coding agent based on GPT-5"))
  55. require.False(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.5"), "You are GPT-5.1 running in the Codex CLI"))
  56. require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.2"), "You are GPT-5.2 running in the Codex CLI"))
  57. require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.1"), "You are GPT-5.1 running in the Codex CLI"))
  58. }