Files

100 lines
2.7 KiB
Go
Raw Permalink Normal View History

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