111 lines
3.1 KiB
Go
111 lines
3.1 KiB
Go
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)
|
|
})
|
|
}
|
|
}
|