mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-15 23:22:59 +08:00
Keep the internal platform ID opencode_go. Product surface is OpenCode with account_mode zen|go, model-aware routing across Chat Completions, Responses, and Anthropic Messages, and X-OpenCode-Session derived from prompt_cache_key / metadata.user_id so prompt cache can hit. Unmatched models fall back to /v1/chat/completions. Related to #6742.
106 lines
4.1 KiB
Go
106 lines
4.1 KiB
Go
//go:build unit
|
|
|
|
package service
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func openCodeGoTestAccount(id int64) *Account {
|
|
return &Account{
|
|
ID: id,
|
|
Name: "oc",
|
|
Platform: PlatformOpenCodeGo,
|
|
Type: AccountTypeAPIKey,
|
|
Status: StatusActive,
|
|
Concurrency: 1,
|
|
Credentials: map[string]any{
|
|
"api_key": "sk-opencode-go-test",
|
|
"api_protocol": APIProtocolAdaptive,
|
|
"base_url": "https://opencode.ai/zen/go/v1",
|
|
"api_base_urls": map[string]any{
|
|
APIProtocolChatCompletions: "https://opencode.ai/zen/go/v1",
|
|
APIProtocolAnthropic: "https://opencode.ai/zen/go",
|
|
APIProtocolResponses: "https://opencode.ai/zen/go/v1",
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestAccountTestService_OpenCodeGoDeepSeekFlashUsesChatCompletions(t *testing.T) {
|
|
account := openCodeGoTestAccount(401)
|
|
svc, upstream := adaptiveCNAccountTestService(account, adaptiveCNChatTestResponse())
|
|
c, recorder := newTestContext()
|
|
|
|
err := svc.TestAccountConnection(c, account.ID, "deepseek-v4-flash", "hi", AccountTestModeDefault)
|
|
|
|
require.NoError(t, err)
|
|
require.Len(t, upstream.requests, 1)
|
|
require.Equal(t, "https://opencode.ai/zen/go/v1/chat/completions", upstream.requests[0].URL.String())
|
|
require.Equal(t, "Bearer sk-opencode-go-test", upstream.requests[0].Header.Get("Authorization"))
|
|
require.NotEmpty(t, upstream.requests[0].Header.Get("X-OpenCode-Session"))
|
|
require.Contains(t, recorder.Body.String(), `"type":"test_complete"`)
|
|
require.NotContains(t, upstream.requests[0].URL.Path, "/messages")
|
|
}
|
|
|
|
func TestAccountTestService_OpenCodeGoGrokUsesResponses(t *testing.T) {
|
|
account := openCodeGoTestAccount(402)
|
|
svc, upstream := adaptiveCNAccountTestService(account, adaptiveCNResponsesTestResponse())
|
|
c, recorder := newTestContext()
|
|
|
|
err := svc.TestAccountConnection(c, account.ID, "grok-4.6", "hi", AccountTestModeDefault)
|
|
|
|
require.NoError(t, err)
|
|
require.Len(t, upstream.requests, 1)
|
|
require.Equal(t, "https://opencode.ai/zen/go/v1/responses", upstream.requests[0].URL.String())
|
|
require.Equal(t, "Bearer sk-opencode-go-test", upstream.requests[0].Header.Get("Authorization"))
|
|
require.NotEmpty(t, upstream.requests[0].Header.Get("X-OpenCode-Session"))
|
|
require.Contains(t, recorder.Body.String(), `"type":"test_complete"`)
|
|
}
|
|
|
|
func TestAccountTestService_OpenCodeGoMiniMaxUsesAnthropicMessages(t *testing.T) {
|
|
account := openCodeGoTestAccount(403)
|
|
svc, upstream := adaptiveCNAccountTestService(account, adaptiveCNAnthropicTestResponse())
|
|
c, recorder := newTestContext()
|
|
|
|
err := svc.TestAccountConnection(c, account.ID, "minimax-m3", "hi", AccountTestModeDefault)
|
|
|
|
require.NoError(t, err)
|
|
require.Len(t, upstream.requests, 1)
|
|
req := upstream.requests[0]
|
|
require.Equal(t, "https://opencode.ai/zen/go/v1/messages", req.URL.String())
|
|
require.Empty(t, req.URL.RawQuery)
|
|
require.Equal(t, "sk-opencode-go-test", req.Header.Get("x-api-key"))
|
|
require.NotEmpty(t, req.Header.Get("X-OpenCode-Session"))
|
|
require.Contains(t, recorder.Body.String(), `"type":"test_complete"`)
|
|
}
|
|
|
|
func TestAccountTestService_OpenCodeGoPinnedChatProtocolIgnoresCatalog(t *testing.T) {
|
|
account := openCodeGoTestAccount(404)
|
|
account.Credentials["api_protocol"] = APIProtocolChatCompletions
|
|
svc, upstream := adaptiveCNAccountTestService(account, adaptiveCNChatTestResponse())
|
|
c, _ := newTestContext()
|
|
|
|
err := svc.TestAccountConnection(c, account.ID, "grok-4.6", "hi", AccountTestModeDefault)
|
|
|
|
require.NoError(t, err)
|
|
require.Len(t, upstream.requests, 1)
|
|
require.Equal(t, "https://opencode.ai/zen/go/v1/chat/completions", upstream.requests[0].URL.String())
|
|
}
|
|
|
|
func TestAccountTestService_OpenCodeGoEmptyModelDefaultsToChatCatalogID(t *testing.T) {
|
|
account := openCodeGoTestAccount(405)
|
|
svc, upstream := adaptiveCNAccountTestService(account, adaptiveCNChatTestResponse())
|
|
c, recorder := newTestContext()
|
|
|
|
err := svc.TestAccountConnection(c, account.ID, "", "hi", AccountTestModeDefault)
|
|
|
|
require.NoError(t, err)
|
|
require.Len(t, upstream.requests, 1)
|
|
require.Equal(t, "https://opencode.ai/zen/go/v1/chat/completions", upstream.requests[0].URL.String())
|
|
require.True(t, strings.Contains(recorder.Body.String(), DefaultOpenCodeGoTestModel))
|
|
}
|