Files
sub2api/backend/internal/repository/scheduler_cache_test.go
T
李建琦 6d655c9903
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
Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
2026-08-21 18:30:13 +08:00

111 lines
3.7 KiB
Go

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