mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
117 lines
3.4 KiB
Go
117 lines
3.4 KiB
Go
package claude
|
|
|
|
import "testing"
|
|
|
|
type mockClaudeConfig struct {
|
|
aliases map[string]string
|
|
}
|
|
|
|
func (m mockClaudeConfig) ModelAliases() map[string]string { return m.aliases }
|
|
func (mockClaudeConfig) CurrentInputFileEnabled() bool { return true }
|
|
func (mockClaudeConfig) CurrentInputFileMinChars() int { return 0 }
|
|
|
|
func TestNormalizeClaudeRequestUsesGlobalAliasMapping(t *testing.T) {
|
|
req := map[string]any{
|
|
"model": "claude-opus-4-6",
|
|
"messages": []any{
|
|
map[string]any{"role": "user", "content": "hello"},
|
|
},
|
|
}
|
|
out, err := normalizeClaudeRequest(mockClaudeConfig{
|
|
aliases: map[string]string{
|
|
"claude-opus-4-6": "deepseek-v4-pro-search",
|
|
},
|
|
}, req)
|
|
if err != nil {
|
|
t.Fatalf("normalizeClaudeRequest error: %v", err)
|
|
}
|
|
if out.Standard.ResolvedModel != "deepseek-v4-pro-search" {
|
|
t.Fatalf("resolved model mismatch: got=%q", out.Standard.ResolvedModel)
|
|
}
|
|
if !out.Standard.Thinking || !out.Standard.Search {
|
|
t.Fatalf("unexpected flags: thinking=%v search=%v", out.Standard.Thinking, out.Standard.Search)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeClaudeRequestDisablesThinkingWhenRequested(t *testing.T) {
|
|
req := map[string]any{
|
|
"model": "claude-opus-4-6",
|
|
"messages": []any{
|
|
map[string]any{"role": "user", "content": "hello"},
|
|
},
|
|
"thinking": map[string]any{"type": "disabled"},
|
|
}
|
|
out, err := normalizeClaudeRequest(mockClaudeConfig{
|
|
aliases: map[string]string{
|
|
"claude-opus-4-6": "deepseek-v4-pro",
|
|
},
|
|
}, req)
|
|
if err != nil {
|
|
t.Fatalf("normalizeClaudeRequest error: %v", err)
|
|
}
|
|
if out.Standard.Thinking {
|
|
t.Fatalf("expected explicit Claude thinking disable to win")
|
|
}
|
|
}
|
|
|
|
func TestNormalizeClaudeRequestEnablesThinkingWhenRequested(t *testing.T) {
|
|
req := map[string]any{
|
|
"model": "claude-opus-4-6",
|
|
"messages": []any{
|
|
map[string]any{"role": "user", "content": "hello"},
|
|
},
|
|
"thinking": map[string]any{"type": "enabled", "budget_tokens": 1024},
|
|
}
|
|
out, err := normalizeClaudeRequest(mockClaudeConfig{
|
|
aliases: map[string]string{
|
|
"claude-opus-4-6": "deepseek-v4-pro",
|
|
},
|
|
}, req)
|
|
if err != nil {
|
|
t.Fatalf("normalizeClaudeRequest error: %v", err)
|
|
}
|
|
if !out.Standard.Thinking {
|
|
t.Fatalf("expected explicit Claude thinking request to enable downstream thinking")
|
|
}
|
|
}
|
|
|
|
func TestNormalizeClaudeRequestNoThinkingAliasForcesThinkingOff(t *testing.T) {
|
|
req := map[string]any{
|
|
"model": "claude-opus-4-6-nothinking",
|
|
"messages": []any{
|
|
map[string]any{"role": "user", "content": "hello"},
|
|
},
|
|
"thinking": map[string]any{"type": "enabled", "budget_tokens": 1024},
|
|
}
|
|
out, err := normalizeClaudeRequest(mockClaudeConfig{}, req)
|
|
if err != nil {
|
|
t.Fatalf("normalizeClaudeRequest error: %v", err)
|
|
}
|
|
if out.Standard.ResolvedModel != "deepseek-v4-pro-nothinking" {
|
|
t.Fatalf("resolved model mismatch: got=%q", out.Standard.ResolvedModel)
|
|
}
|
|
if out.Standard.Thinking {
|
|
t.Fatalf("expected nothinking alias to force downstream thinking off")
|
|
}
|
|
}
|
|
|
|
func TestNormalizeClaudeRequestPrefersGlobalAliasMapping(t *testing.T) {
|
|
req := map[string]any{
|
|
"model": "claude-sonnet-4-6",
|
|
"messages": []any{
|
|
map[string]any{"role": "user", "content": "hello"},
|
|
},
|
|
}
|
|
out, err := normalizeClaudeRequest(mockClaudeConfig{
|
|
aliases: map[string]string{
|
|
"claude-sonnet-4-6": "deepseek-v4-flash",
|
|
},
|
|
}, req)
|
|
if err != nil {
|
|
t.Fatalf("normalizeClaudeRequest error: %v", err)
|
|
}
|
|
if out.Standard.ResolvedModel != "deepseek-v4-flash" {
|
|
t.Fatalf("expected global alias to win for explicit model, got=%q", out.Standard.ResolvedModel)
|
|
}
|
|
}
|