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)
|
||
}
|