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