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

This commit is contained in:
李建琦
2026-08-21 18:30:13 +08:00
commit 6d655c9903
3584 changed files with 1270640 additions and 0 deletions
@@ -0,0 +1,99 @@
//go:build unit
package admin
import (
"context"
"testing"
"github.com/Wei-Shaw/sub2api/internal/service"
"github.com/stretchr/testify/require"
)
type grokRefreshOAuthStub struct {
account *service.Account
info *service.GrokTokenInfo
calls int
}
func (s *grokRefreshOAuthStub) RefreshAccountToken(_ context.Context, account *service.Account) (*service.GrokTokenInfo, error) {
s.calls++
s.account = account
return s.info, nil
}
func (s *grokRefreshOAuthStub) BuildAccountCredentials(info *service.GrokTokenInfo) map[string]any {
return map[string]any{
"access_token": info.AccessToken,
"refresh_token": info.RefreshToken,
"expires_at": info.ExpiresAt,
"base_url": "https://api.x.ai/v1",
}
}
type grokRefreshAdminService struct {
*stubAdminService
updatedCredentials map[string]any
}
func (s *grokRefreshAdminService) UpdateAccount(_ context.Context, id int64, input *service.UpdateAccountInput) (*service.Account, error) {
s.updatedCredentials = input.Credentials
return &service.Account{
ID: id,
Platform: service.PlatformGrok,
Type: service.AccountTypeOAuth,
Status: service.StatusActive,
Credentials: input.Credentials,
}, nil
}
func TestRefreshSingleAccountRoutesGrokThroughGrokOAuthService(t *testing.T) {
t.Parallel()
adminSvc := &grokRefreshAdminService{stubAdminService: newStubAdminService()}
grokOAuth := &grokRefreshOAuthStub{info: &service.GrokTokenInfo{
AccessToken: "new-access",
RefreshToken: "new-refresh",
ExpiresAt: 1_800_000_000,
}}
handler := NewAccountHandler(
adminSvc,
nil,
nil,
nil,
nil,
grokOAuth,
nil,
nil,
nil,
nil,
nil,
nil,
nil,
nil,
)
account := &service.Account{
ID: 4227,
Platform: service.PlatformGrok,
Type: service.AccountTypeOAuth,
Credentials: map[string]any{
"access_token": "old-access",
"refresh_token": "old-refresh",
"base_url": "https://example.invalid/v1",
"subscription_tier": "SUPER_GROK",
"entitlement_status": "ACTIVE",
},
}
updated, warning, err := handler.refreshSingleAccount(context.Background(), account)
require.NoError(t, err)
require.Empty(t, warning)
require.Equal(t, 1, grokOAuth.calls)
require.Same(t, account, grokOAuth.account)
require.Equal(t, "new-access", adminSvc.updatedCredentials["access_token"])
require.Equal(t, "new-refresh", adminSvc.updatedCredentials["refresh_token"])
require.Equal(t, "https://example.invalid/v1", adminSvc.updatedCredentials["base_url"])
require.Equal(t, "SUPER_GROK", adminSvc.updatedCredentials["subscription_tier"])
require.Equal(t, "ACTIVE", adminSvc.updatedCredentials["entitlement_status"])
require.Equal(t, adminSvc.updatedCredentials, updated.Credentials)
}