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 service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestClassifyImageBillingTier(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
size string
|
||||
wantTier string
|
||||
wantOK bool
|
||||
}{
|
||||
{name: "explicit 2k square", size: "2048x2048", wantTier: "2K", wantOK: true},
|
||||
{name: "explicit 2k landscape", size: "2048x1152", wantTier: "2K", wantOK: true},
|
||||
{name: "explicit 4k landscape", size: "3840x2160", wantTier: "4K", wantOK: true},
|
||||
{name: "explicit 4k portrait", size: "2160x3840", wantTier: "4K", wantOK: true},
|
||||
{name: "long edge 1k", size: "1024X768", wantTier: "1K", wantOK: true},
|
||||
{name: "long edge 2k", size: "1280x768", wantTier: "2K", wantOK: true},
|
||||
{name: "long edge 4k", size: "2560x1600", wantTier: "4K", wantOK: true},
|
||||
{name: "tier string 1k", size: "1k", wantTier: "1K", wantOK: true},
|
||||
{name: "empty", size: "", wantOK: false},
|
||||
{name: "auto", size: "auto", wantOK: false},
|
||||
{name: "invalid", size: "not-a-size", wantOK: false},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotTier, gotOK := ClassifyImageBillingTier(tt.size)
|
||||
require.Equal(t, tt.wantOK, gotOK)
|
||||
require.Equal(t, tt.wantTier, gotTier)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveImageBillingSize(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
inputSize string
|
||||
outputSizes []string
|
||||
wantBilling string
|
||||
wantOutput string
|
||||
wantSource string
|
||||
wantBreakdown map[string]int
|
||||
}{
|
||||
{
|
||||
name: "output wins over input",
|
||||
inputSize: "1024x1024",
|
||||
outputSizes: []string{"3840x2160"},
|
||||
wantBilling: "4K",
|
||||
wantOutput: "3840x2160",
|
||||
wantSource: ImageSizeSourceOutput,
|
||||
wantBreakdown: map[string]int{"4K": 1},
|
||||
},
|
||||
{
|
||||
name: "input fallback",
|
||||
inputSize: "1024x1024",
|
||||
wantBilling: "1K",
|
||||
wantSource: ImageSizeSourceInput,
|
||||
},
|
||||
{
|
||||
name: "auto defaults",
|
||||
inputSize: "auto",
|
||||
wantBilling: "2K",
|
||||
wantSource: ImageSizeSourceDefault,
|
||||
},
|
||||
{
|
||||
name: "empty defaults",
|
||||
inputSize: "",
|
||||
wantBilling: "2K",
|
||||
wantSource: ImageSizeSourceDefault,
|
||||
},
|
||||
{
|
||||
name: "invalid defaults",
|
||||
inputSize: "largest",
|
||||
wantBilling: "2K",
|
||||
wantSource: ImageSizeSourceDefault,
|
||||
},
|
||||
{
|
||||
name: "mixed output chooses highest tier",
|
||||
inputSize: "1024x1024",
|
||||
outputSizes: []string{"1024x1024", "3840x2160", "1280x720"},
|
||||
wantBilling: "4K",
|
||||
wantOutput: "1024x1024",
|
||||
wantSource: ImageSizeSourceOutput,
|
||||
wantBreakdown: map[string]int{"1K": 1, "2K": 1, "4K": 1},
|
||||
},
|
||||
{
|
||||
name: "unparseable output falls back to parseable input",
|
||||
inputSize: "2048x1152",
|
||||
outputSizes: []string{"auto"},
|
||||
wantBilling: "2K",
|
||||
wantOutput: "auto",
|
||||
wantSource: ImageSizeSourceInput,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := ResolveImageBillingSize(tt.inputSize, tt.outputSizes)
|
||||
require.Equal(t, tt.wantBilling, got.BillingSize)
|
||||
require.Equal(t, tt.inputSize, got.InputSize)
|
||||
require.Equal(t, tt.wantOutput, got.OutputSize)
|
||||
require.Equal(t, tt.wantSource, got.Source)
|
||||
require.Equal(t, tt.wantBreakdown, got.Breakdown)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user