Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
69 lines
3.0 KiB
Go
69 lines
3.0 KiB
Go
package service
|
||
|
||
import (
|
||
"strings"
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/require"
|
||
)
|
||
|
||
// ensureCodexReasoningInclude:带 reasoning 时补齐 include,幂等且保留既有项。
|
||
func TestEnsureCodexReasoningInclude(t *testing.T) {
|
||
// reasoning 存在、include 缺失 → 注入
|
||
body := map[string]any{"reasoning": map[string]any{"effort": "medium"}}
|
||
require.True(t, ensureCodexReasoningInclude(body))
|
||
require.Equal(t, []any{"reasoning.encrypted_content"}, body["include"])
|
||
// 幂等:再次调用不重复
|
||
require.False(t, ensureCodexReasoningInclude(body))
|
||
|
||
// 无 reasoning → 不动
|
||
body2 := map[string]any{}
|
||
require.False(t, ensureCodexReasoningInclude(body2))
|
||
_, ok := body2["include"]
|
||
require.False(t, ok)
|
||
|
||
// 既有 include 保留并追加
|
||
body3 := map[string]any{
|
||
"reasoning": map[string]any{"effort": "high"},
|
||
"include": []any{"foo"},
|
||
}
|
||
require.True(t, ensureCodexReasoningInclude(body3))
|
||
require.Equal(t, []any{"foo", "reasoning.encrypted_content"}, body3["include"])
|
||
}
|
||
|
||
// applyCodexClientMetadata:用账号真实 device_id 注入 installation 标识,幂等、不覆盖既有项、不伪造。
|
||
func TestApplyCodexClientMetadata(t *testing.T) {
|
||
// 仅 OpenAI OAuth 账号才有 device_id(GetOpenAIDeviceID 的门控)。
|
||
acc := &Account{Platform: PlatformOpenAI, Type: AccountTypeOAuth, Extra: map[string]any{"openai_device_id": "dev-xyz"}}
|
||
|
||
body := map[string]any{}
|
||
require.True(t, applyCodexClientMetadata(body, acc))
|
||
cm, ok := body["client_metadata"].(map[string]any)
|
||
require.True(t, ok)
|
||
require.Equal(t, "dev-xyz", cm["x-codex-installation-id"])
|
||
// 幂等
|
||
require.False(t, applyCodexClientMetadata(body, acc))
|
||
|
||
// OAuth 账号但无 device_id → 不写入(不伪造)
|
||
body2 := map[string]any{}
|
||
require.False(t, applyCodexClientMetadata(body2, &Account{Platform: PlatformOpenAI, Type: AccountTypeOAuth}))
|
||
_, ok = body2["client_metadata"]
|
||
require.False(t, ok)
|
||
|
||
// 既有 client_metadata(如 turn metadata)保留,仅补 installation 键
|
||
body3 := map[string]any{"client_metadata": map[string]any{"x-codex-turn-metadata": "t"}}
|
||
require.True(t, applyCodexClientMetadata(body3, acc))
|
||
cm3, _ := body3["client_metadata"].(map[string]any)
|
||
require.Equal(t, "t", cm3["x-codex-turn-metadata"])
|
||
require.Equal(t, "dev-xyz", cm3["x-codex-installation-id"])
|
||
}
|
||
|
||
// defaultCodexSynthInstructions:按模型选用真实 Codex base prompt。
|
||
func TestDefaultCodexSynthInstructionsModelAware(t *testing.T) {
|
||
require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5-codex"), "You are Codex, based on GPT-5"))
|
||
require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.5"), "You are Codex, a coding agent based on GPT-5"))
|
||
require.False(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.5"), "You are GPT-5.1 running in the Codex CLI"))
|
||
require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.2"), "You are GPT-5.2 running in the Codex CLI"))
|
||
require.True(t, strings.Contains(defaultCodexSynthInstructions("gpt-5.1"), "You are GPT-5.1 running in the Codex CLI"))
|
||
}
|