mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-03 06:52:13 +08:00
68 lines
2.3 KiB
Go
68 lines
2.3 KiB
Go
|
|
package service
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"errors"
|
|||
|
|
"net/url"
|
|||
|
|
"testing"
|
|||
|
|
|
|||
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
|||
|
|
"github.com/stretchr/testify/require"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type openaiOAuthClientAuthURLStub struct{}
|
|||
|
|
|
|||
|
|
func (s *openaiOAuthClientAuthURLStub) ExchangeCode(ctx context.Context, code, codeVerifier, redirectURI, proxyURL, clientID string) (*openai.TokenResponse, error) {
|
|||
|
|
return nil, errors.New("not implemented")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (s *openaiOAuthClientAuthURLStub) RefreshToken(ctx context.Context, refreshToken, proxyURL string) (*openai.TokenResponse, error) {
|
|||
|
|
return nil, errors.New("not implemented")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func (s *openaiOAuthClientAuthURLStub) RefreshTokenWithClientID(ctx context.Context, refreshToken, proxyURL string, clientID string) (*openai.TokenResponse, error) {
|
|||
|
|
return nil, errors.New("not implemented")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow(t *testing.T) {
|
|||
|
|
svc := NewOpenAIOAuthService(nil, &openaiOAuthClientAuthURLStub{})
|
|||
|
|
defer svc.Stop()
|
|||
|
|
|
|||
|
|
result, err := svc.GenerateAuthURL(context.Background(), nil, "", PlatformOpenAI)
|
|||
|
|
require.NoError(t, err)
|
|||
|
|
require.NotEmpty(t, result.AuthURL)
|
|||
|
|
require.NotEmpty(t, result.SessionID)
|
|||
|
|
|
|||
|
|
parsed, err := url.Parse(result.AuthURL)
|
|||
|
|
require.NoError(t, err)
|
|||
|
|
q := parsed.Query()
|
|||
|
|
require.Equal(t, openai.ClientID, q.Get("client_id"))
|
|||
|
|
require.Equal(t, "true", q.Get("codex_cli_simplified_flow"))
|
|||
|
|
|
|||
|
|
session, ok := svc.sessionStore.Get(result.SessionID)
|
|||
|
|
require.True(t, ok)
|
|||
|
|
require.Equal(t, openai.ClientID, session.ClientID)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TestOpenAIOAuthService_GenerateAuthURL_SoraUsesCodexClient 验证 Sora 平台复用 Codex CLI 的
|
|||
|
|
// client_id(支持 localhost redirect_uri),但不启用 codex_cli_simplified_flow。
|
|||
|
|
func TestOpenAIOAuthService_GenerateAuthURL_SoraUsesCodexClient(t *testing.T) {
|
|||
|
|
svc := NewOpenAIOAuthService(nil, &openaiOAuthClientAuthURLStub{})
|
|||
|
|
defer svc.Stop()
|
|||
|
|
|
|||
|
|
result, err := svc.GenerateAuthURL(context.Background(), nil, "", PlatformSora)
|
|||
|
|
require.NoError(t, err)
|
|||
|
|
require.NotEmpty(t, result.AuthURL)
|
|||
|
|
require.NotEmpty(t, result.SessionID)
|
|||
|
|
|
|||
|
|
parsed, err := url.Parse(result.AuthURL)
|
|||
|
|
require.NoError(t, err)
|
|||
|
|
q := parsed.Query()
|
|||
|
|
require.Equal(t, openai.ClientID, q.Get("client_id"))
|
|||
|
|
require.Empty(t, q.Get("codex_cli_simplified_flow"))
|
|||
|
|
|
|||
|
|
session, ok := svc.sessionStore.Get(result.SessionID)
|
|||
|
|
require.True(t, ok)
|
|||
|
|
require.Equal(t, openai.ClientID, session.ClientID)
|
|||
|
|
}
|