100 lines
2.7 KiB
Go
100 lines
2.7 KiB
Go
//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)
|
||
|
|
}
|