| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package service
- import (
- "context"
- "testing"
- "github.com/stretchr/testify/require"
- )
- // TestGetAccessToken_SparkShadowResolvesToParent 验证对影子账号调用 GetAccessToken
- // 时能透明地解析到母账号的凭据,防止 refresh_token 脱钩。
- // 影子账号不持凭据;断言必须返回母账号的 access_token。
- func TestGetAccessToken_SparkShadowResolvesToParent(t *testing.T) {
- ctx := context.Background()
- parentID := int64(100)
- parent := Account{
- ID: parentID,
- Platform: PlatformOpenAI,
- Type: AccountTypeOAuth,
- Status: StatusActive,
- Credentials: map[string]any{
- "access_token": "parent-access-token",
- },
- }
- shadow := Account{
- ID: 200,
- Platform: PlatformOpenAI,
- Type: AccountTypeOAuth,
- ParentAccountID: &parentID,
- // 影子账号不持凭据,与生产语义一致
- }
- repo := &stubOpenAIAccountRepo{accounts: []Account{parent}}
- svc := &OpenAIGatewayService{
- accountRepo: repo,
- // openAITokenProvider=nil → 走降级路径,直接读 account.GetOpenAIAccessToken()
- }
- // Before fix (RED): shadow 无凭据 → GetOpenAIAccessToken()="" → error
- // After fix (GREEN): shadow 解析到 parent → 返回 parent 的 "parent-access-token"
- token, tokenType, err := svc.GetAccessToken(ctx, &shadow)
- require.NoError(t, err)
- require.Equal(t, "parent-access-token", token)
- require.Equal(t, "oauth", tokenType)
- }
|