86 lines
3.4 KiB
Go
86 lines
3.4 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestImageSizePresetsValidationAndRoundTrip(t *testing.T) {
|
|
profile := DefaultImageCapabilityConfig("openai-image", "test")
|
|
profile.Size = ImageSizeConfig{Parameter: "size", Values: []string{"1824x1024", "1920x1080"}, Default: "1824x1024", Presets: []ImageSizePreset{
|
|
{Tier: "1k", Ratio: "16:9", Size: "1824x1024", Width: 1824, Height: 1024},
|
|
{Tier: "2k", Ratio: "16:9", Size: "1920x1080", Width: 1920, Height: 1080},
|
|
}}
|
|
if err := validateImageCapabilityConfig(profile); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
data, err := json.Marshal(profile)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var restored ImageCapabilityConfig
|
|
if err := json.Unmarshal(data, &restored); err != nil || len(restored.Size.Presets) != 2 || restored.Size.Presets[1].Size != "1920x1080" {
|
|
t.Fatalf("presets did not survive JSON round trip: %v", err)
|
|
}
|
|
|
|
for _, tc := range []struct {
|
|
name string
|
|
edit func(*ImageCapabilityConfig)
|
|
want string
|
|
}{
|
|
{"invalid tier", func(p *ImageCapabilityConfig) { p.Size.Presets[0].Tier = "8k" }, "档位"},
|
|
{"zero ratio", func(p *ImageCapabilityConfig) { p.Size.Presets[0].Ratio = "0:9" }, "比例"},
|
|
{"mismatched ratio", func(p *ImageCapabilityConfig) { p.Size.Presets[0].Ratio = "9:16" }, "不一致"},
|
|
{"tiny size", func(p *ImageCapabilityConfig) {
|
|
p.Size.Presets[0].Width = 16
|
|
p.Size.Presets[0].Height = 16
|
|
p.Size.Presets[0].Size = "16x16"
|
|
}, "像素"},
|
|
{"size mismatch", func(p *ImageCapabilityConfig) { p.Size.Presets[0].Size = "1024x1024" }, "像素"},
|
|
{"not supported", func(p *ImageCapabilityConfig) { p.Size.Values = []string{"1824x1024"} }, "支持值"},
|
|
{"duplicate equivalent ratio", func(p *ImageCapabilityConfig) { p.Size.Presets[1].Tier = "1k"; p.Size.Presets[1].Ratio = "32:18" }, "重复"},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var p ImageCapabilityConfig
|
|
if err := json.Unmarshal(data, &p); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tc.edit(&p)
|
|
if err := validateImageCapabilityConfig(&p); err == nil || !strings.Contains(err.Error(), tc.want) {
|
|
t.Fatalf("expected %s, got %v", tc.want, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestImageSizePresetsEnforceResolutionRatioPair(t *testing.T) {
|
|
profile := DefaultImageCapabilityConfig("grok-image", "grok-imagine-image")
|
|
profile.Quality.Default = "1k"
|
|
profile.Size = ImageSizeConfig{Parameter: "aspect_ratio", Values: []string{"1:1", "16:9"}, Default: "1:1", Presets: []ImageSizePreset{
|
|
{Tier: "1k", Ratio: "1:1", Size: "1024x1024", Width: 1024, Height: 1024},
|
|
{Tier: "2k", Ratio: "16:9", Size: "2752x1536", Width: 2752, Height: 1536},
|
|
}}
|
|
if err := validateImageCapabilityConfig(profile); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
profile.Quality.Default = "2k"
|
|
if err := validateImageCapabilityConfig(profile); err == nil || !strings.Contains(err.Error(), "默认图片分辨率") {
|
|
t.Fatalf("expected invalid default pair error, got %v", err)
|
|
}
|
|
profile.Quality.Default = "1k"
|
|
input := canvasGenerationInput{Config: providerConfig{Size: "1:1", Quality: "2k"}}
|
|
if err := validateImageTask(profile, input); err == nil || !strings.Contains(err.Error(), "当前分辨率") {
|
|
t.Fatalf("expected pair validation error, got %v", err)
|
|
}
|
|
input.Config.Size = "16:9"
|
|
if err := validateImageTask(profile, input); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
profile.Size.AllowCustom = true
|
|
input.Config.Size = "1:1"
|
|
if err := validateImageTask(profile, input); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|