test: cover image search auto-link guards (#279)

This commit is contained in:
QiuSW
2026-09-15 09:01:10 +08:00
parent 804448ede0
commit 90c1668fe3
@@ -0,0 +1,58 @@
package task
import (
"context"
"encoding/json"
"testing"
"go-admin/app/goauto/models"
)
func TestImageSearchPriceAllowedRefusesCrossCurrency(t *testing.T) {
snapshot := ImageSearchSnapshot{ReferencePriceCent: 1000, ReferenceCurrency: "TWD", MaxPriceRatio: 3}
if allowed, comparable := ImageSearchPriceAllowed(snapshot, "CNY", 2000); allowed || comparable {
t.Fatalf("cross-currency price must not be compared: allowed=%v comparable=%v", allowed, comparable)
}
if allowed, comparable := ImageSearchPriceAllowed(snapshot, "TWD", 3000); !allowed || !comparable {
t.Fatalf("same-currency price within ratio should pass: allowed=%v comparable=%v", allowed, comparable)
}
if allowed, comparable := ImageSearchPriceAllowed(snapshot, "TWD", 3001); allowed || !comparable {
t.Fatalf("same-currency price over ratio should fail: allowed=%v comparable=%v", allowed, comparable)
}
}
func TestAutoLinkImageSearchDoesNotOverwriteManualAssociation(t *testing.T) {
db := openTaskDatabase(t)
manualPDD := models.PDDProduct{GoodsID: "manual-pdd", URL: "https://mobile.yangkeduo.com/goods.html?goods_id=manual-pdd", Status: "active"}
autoPDD := models.PDDProduct{GoodsID: "auto-pdd", URL: "https://mobile.yangkeduo.com/goods.html?goods_id=auto-pdd", Status: "active"}
if err := db.Create(&manualPDD).Error; err != nil {
t.Fatal(err)
}
if err := db.Create(&autoPDD).Error; err != nil {
t.Fatal(err)
}
shopee := models.ShopeeProduct{ShopeeItemID: "auto-link-test", Title: "test", Currency: "CNY", SpecsJSON: "[]", PDDProductID: &manualPDD.ID}
if err := db.Create(&shopee).Error; err != nil {
t.Fatal(err)
}
rule := models.CollectionRule{Name: "image-search-test", ContentJSON: "{}"}
if err := db.Create(&rule).Error; err != nil {
t.Fatal(err)
}
snapshot := ImageSearchSnapshot{ShopeeProductID: shopee.ID, RepresentativeSYBProductID: 1, ReferenceCurrency: "CNY", ReferencePriceCent: 100, MaxPriceRatio: 3, ImageSearchImage: ImageSearchImage{ImageURL: "https://example.invalid/a.jpg", MediaType: "image/jpeg", SizeBytes: 1, SHA256: "0123456789012345678901234567890101234567890123456789012345678901"}}
raw, _ := json.Marshal(snapshot)
task := models.CollectionTask{Source: models.CollectionTaskSourceImageSearch, Status: models.TaskStatusCompleted, PDDProductID: &autoPDD.ID, RuleID: rule.ID, RuleSnapshot: "{}", ImageSearchSnapshot: func() *string { v := string(raw); return &v }()}
if err := db.Create(&task).Error; err != nil {
t.Fatal(err)
}
if err := NewService(db).autoLinkImageSearch(context.Background(), task.ID); err != nil {
t.Fatal(err)
}
var saved models.ShopeeProduct
if err := db.First(&saved, shopee.ID).Error; err != nil {
t.Fatal(err)
}
if saved.PDDProductID == nil || *saved.PDDProductID != manualPDD.ID || saved.ImageSearchLinked {
t.Fatalf("manual association was overwritten: %+v", saved)
}
}