Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
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
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
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// stubChatGPTHeadersRepo 是最小化 AccountRepository stub,仅实现 GetByID,
|
||||
// 供 TestResolveAndSetOpenAIChatGPTAccountHeaders 使用。
|
||||
type stubChatGPTHeadersRepo struct {
|
||||
AccountRepository
|
||||
byID map[int64]*Account
|
||||
}
|
||||
|
||||
func (r *stubChatGPTHeadersRepo) GetByID(_ context.Context, id int64) (*Account, error) {
|
||||
return r.byID[id], nil
|
||||
}
|
||||
|
||||
func TestResolveAndSetOpenAIChatGPTAccountHeaders(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
pid := int64(100)
|
||||
|
||||
parentCreds := map[string]any{"chatgpt_account_id": "org-parent"}
|
||||
parent := &Account{
|
||||
ID: 100,
|
||||
Platform: PlatformOpenAI,
|
||||
Type: AccountTypeOAuth,
|
||||
Status: StatusActive,
|
||||
Credentials: parentCreds,
|
||||
}
|
||||
repo := &stubChatGPTHeadersRepo{byID: map[int64]*Account{100: parent}}
|
||||
|
||||
t.Run("shadow_resolves_to_parent_org", func(t *testing.T) {
|
||||
shadow := &Account{
|
||||
ID: 200,
|
||||
ParentAccountID: &pid,
|
||||
Platform: PlatformOpenAI,
|
||||
Type: AccountTypeOAuth,
|
||||
}
|
||||
headers := make(http.Header)
|
||||
err := resolveAndSetOpenAIChatGPTAccountHeaders(ctx, repo, headers, shadow)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "org-parent", headers.Get("chatgpt-account-id"),
|
||||
"影子账号应透传母账号的 chatgpt-account-id")
|
||||
})
|
||||
|
||||
t.Run("normal_account_passthrough", func(t *testing.T) {
|
||||
ownCreds := map[string]any{"chatgpt_account_id": "org-own"}
|
||||
normal := &Account{
|
||||
ID: 300,
|
||||
Platform: PlatformOpenAI,
|
||||
Type: AccountTypeOAuth,
|
||||
Credentials: ownCreds,
|
||||
}
|
||||
headers := make(http.Header)
|
||||
err := resolveAndSetOpenAIChatGPTAccountHeaders(ctx, repo, headers, normal)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "org-own", headers.Get("chatgpt-account-id"),
|
||||
"普通账号应透传自身的 chatgpt-account-id")
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user