fix(app): 前台图片模型 - 分辨率档位与各供应线路取并集,修掉只显示单档

capabilitySpecWithRoutePresets 原先只在「前台自身没有任何尺寸预设」时才与线路合并。但前台快照的预设往往来自单条线路(后续新增的供应线路还没同步进来),条件不成立后,其它线路的 2K/4K 预设永远补不进来,前台只显示 1K。

现在无论自身是否已有预设都与各线路取并集(mergeCapabilityImageSize 已包含前台自身的预设,并集不会丢档)。

线上数据可复现:image-2.0-1k 的前台规格 imageSize.presets 全部是 1k,而它四条线路分别是 none/none/1k/2k+4k。补了一条回归测试,反向验证确认旧逻辑下该测试精确报出 tier 2k missing。
This commit is contained in:
strive_qin committed 2026-09-16 19:49:57 +08:00
1 parent da0531f6eb
commit 6a63442dcf
2 files changed
+48 -16

No files matched your search

@@ -26,6 +26,40 @@ func TestCapabilitySpecWithRoutePresetsRestoresImageSize(t *testing.T) {
}
}
func TestCapabilitySpecWithRoutePresetsUnionsTiersAcrossRoutes(t *testing.T) {
// 前台快照只带了单条线路的 1K 预设,其它线路提供 2K/4K:必须取并集,不能压成单档。
preset := func(size string, tier string, width int, height int) CapabilityImageSizePreset {
return CapabilityImageSizePreset{Size: size, Tier: tier, Ratio: "16:9", Width: width, Height: height}
}
product := CapabilitySpec{
Version: 1,
Capability: "image",
Options: map[string]OptionConstraint{"size": {Values: []any{"16:9"}}},
ImageSize: &CapabilityImageSize{
Parameter: "aspect_ratio",
Presets: []CapabilityImageSizePreset{preset("1824x1024", "1k", 1824, 1024)},
},
}
routes := []CapabilitySpec{
{Version: 1, Capability: "image", ImageSize: &CapabilityImageSize{Parameter: "aspect_ratio", Presets: []CapabilityImageSizePreset{preset("2752x1536", "2k", 2752, 1536)}}},
{Version: 1, Capability: "image", ImageSize: &CapabilityImageSize{Parameter: "aspect_ratio", Presets: []CapabilityImageSizePreset{preset("3840x2160", "4k", 3840, 2160)}}},
}
got := capabilitySpecWithRoutePresets(product, routes)
if got.ImageSize == nil {
t.Fatal("imageSize = nil")
}
tiers := make(map[string]bool, len(got.ImageSize.Presets))
for _, item := range got.ImageSize.Presets {
tiers[item.Tier] = true
}
for _, tier := range []string{"1k", "2k", "4k"} {
if !tiers[tier] {
t.Fatalf("tier %s missing: %#v", tier, got.ImageSize.Presets)
}
}
}
func TestMatchCapabilityRoutesTextImagesOnlyToDeclaredProfiles(t *testing.T) {
plainText := CapabilitySpec{
Version: 1,