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
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:
@@ -0,0 +1,110 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/Wei-Shaw/sub2api/internal/service"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestFilterSchedulerCredentialsKeepsSubscriptionPlanType(t *testing.T) {
|
||||
filtered := filterSchedulerCredentials(map[string]any{
|
||||
"plan_type": "plus",
|
||||
"access_token": "secret-access-token",
|
||||
"refresh_token": "secret-refresh-token",
|
||||
})
|
||||
|
||||
require.Equal(t, "plus", filtered["plan_type"])
|
||||
require.NotContains(t, filtered, "access_token")
|
||||
require.NotContains(t, filtered, "refresh_token")
|
||||
}
|
||||
|
||||
func TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity(t *testing.T) {
|
||||
account := service.Account{
|
||||
ID: 24,
|
||||
Platform: service.PlatformOpenAI,
|
||||
Type: service.AccountTypeOAuth,
|
||||
Credentials: map[string]any{
|
||||
"plan_type": "plus",
|
||||
"access_token": "secret-access-token",
|
||||
},
|
||||
}
|
||||
|
||||
metadata := buildSchedulerMetadataAccount(account)
|
||||
|
||||
require.True(t, metadata.IsOpenAIChatGPTSubscription())
|
||||
require.Empty(t, metadata.GetCredential("access_token"))
|
||||
}
|
||||
|
||||
func TestSchedulerMetadataAccountProjectsUpstreamBillingProbe(t *testing.T) {
|
||||
lastError := strings.Repeat("upstream diagnostic ", 512)
|
||||
probe := map[string]any{
|
||||
"status": "ok",
|
||||
"data": map[string]any{
|
||||
"billing_scope": "token",
|
||||
"resolved_rate_multiplier": 0.03,
|
||||
"peak_rate_enabled": true,
|
||||
"peak_start": "09:00",
|
||||
"peak_end": "18:00",
|
||||
"peak_rate_multiplier": 2.0,
|
||||
"timezone": "Asia/Shanghai",
|
||||
"effective_rate_multiplier": 0.03,
|
||||
"remote_diagnostic": lastError,
|
||||
},
|
||||
"received_at": "2026-07-13T10:00:00Z",
|
||||
"fresh_until": "2026-07-13T11:00:00Z",
|
||||
"next_probe_at": "2026-07-13T10:30:00Z",
|
||||
"http_status": 502,
|
||||
"last_error": lastError,
|
||||
}
|
||||
account := service.Account{
|
||||
ID: 42,
|
||||
Extra: map[string]any{
|
||||
"upstream_billing_probe": probe,
|
||||
"unused_large_field": "drop-me",
|
||||
},
|
||||
}
|
||||
|
||||
metadata := buildSchedulerMetadataAccount(account)
|
||||
fullPayload, metaPayload, err := marshalSchedulerCacheAccount(account)
|
||||
require.NoError(t, err)
|
||||
|
||||
filtered, ok := metadata.Extra["upstream_billing_probe"].(map[string]any)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "ok", filtered["status"])
|
||||
require.Equal(t, "2026-07-13T10:00:00Z", filtered["received_at"])
|
||||
require.Equal(t, "2026-07-13T11:00:00Z", filtered["fresh_until"])
|
||||
require.Equal(t, "2026-07-13T10:30:00Z", filtered["next_probe_at"])
|
||||
require.NotContains(t, filtered, "http_status")
|
||||
require.NotContains(t, filtered, "last_error")
|
||||
filteredData, ok := filtered["data"].(map[string]any)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "token", filteredData["billing_scope"])
|
||||
require.Equal(t, 0.03, filteredData["resolved_rate_multiplier"])
|
||||
require.Equal(t, true, filteredData["peak_rate_enabled"])
|
||||
require.Equal(t, "09:00", filteredData["peak_start"])
|
||||
require.Equal(t, "18:00", filteredData["peak_end"])
|
||||
require.Equal(t, 2.0, filteredData["peak_rate_multiplier"])
|
||||
require.Equal(t, "Asia/Shanghai", filteredData["timezone"])
|
||||
require.NotContains(t, filteredData, "effective_rate_multiplier")
|
||||
require.NotContains(t, filteredData, "remote_diagnostic")
|
||||
require.NotContains(t, metadata.Extra, "unused_large_field")
|
||||
require.Contains(t, string(fullPayload), lastError)
|
||||
require.NotContains(t, string(metaPayload), "last_error")
|
||||
require.Less(t, len(metaPayload)*4, len(fullPayload))
|
||||
}
|
||||
|
||||
func TestSchedulerMetadataAccountDropsInvalidUpstreamBillingProbe(t *testing.T) {
|
||||
for _, probe := range []any{
|
||||
"invalid",
|
||||
map[string]any{},
|
||||
map[string]any{"status": ""},
|
||||
} {
|
||||
metadata := buildSchedulerMetadataAccount(service.Account{
|
||||
Extra: map[string]any{service.UpstreamBillingProbeExtraKey: probe},
|
||||
})
|
||||
|
||||
require.NotContains(t, metadata.Extra, service.UpstreamBillingProbeExtraKey)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user