feat: 统一蝦皮与顺运宝 PDD 关联入口 (#68)
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"cmautobuy/admin/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
pddURLA = "https://mobile.yangkeduo.com/goods.html?goods_id=737116531267"
|
||||
pddURLB = "https://mobile.yangkeduo.com/goods.html?goods_id=937122477375"
|
||||
)
|
||||
|
||||
func TestAssociateShopeePdd_新建并重复复用(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
seedShopeeProduct(t, db, "1001", "商品一")
|
||||
|
||||
for i := 0; i < 2; i++ {
|
||||
got, err := AssociateShopeePdd(db, "1001", pddURLA, false)
|
||||
if err != nil {
|
||||
t.Fatalf("第 %d 次关联失败: %v", i+1, err)
|
||||
}
|
||||
if got != "737116531267" {
|
||||
t.Fatalf("goods_id = %q", got)
|
||||
}
|
||||
}
|
||||
var count int
|
||||
db.QueryRow(`SELECT COUNT(*) FROM pdd_products WHERE goods_id = ?`, "737116531267").Scan(&count)
|
||||
if count != 1 {
|
||||
t.Fatalf("同一 PDD 商品建了 %d 条,想要 1", count)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssociateShopeePdd_无效链接不写任何数据(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
seedShopeeProduct(t, db, "1001", "商品一")
|
||||
if _, err := AssociateShopeePdd(db, "1001", "https://p.pinduoduo.com/short", false); err == nil {
|
||||
t.Fatal("短链接应被拒绝")
|
||||
}
|
||||
var pddCount int
|
||||
db.QueryRow(`SELECT COUNT(*) FROM pdd_products`).Scan(&pddCount)
|
||||
product, _ := repository.GetShopeeProductByGoodsID(db, "1001")
|
||||
if pddCount != 0 || product.PddGoodsID != "" {
|
||||
t.Fatalf("失败后仍写入:pdd=%d, link=%q", pddCount, product.PddGoodsID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssociateShopeePdd_换商品必须确认且旧档案保留(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
seedShopeeProduct(t, db, "1001", "商品一")
|
||||
if _, err := AssociateShopeePdd(db, "1001", pddURLA, false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := AssociateShopeePdd(db, "1001", pddURLB, false); !errors.Is(err, ErrPddAssociationReplaceRequired) {
|
||||
t.Fatalf("未确认换品错误 = %v", err)
|
||||
}
|
||||
product, _ := repository.GetShopeeProductByGoodsID(db, "1001")
|
||||
if product.PddGoodsID != "737116531267" {
|
||||
t.Fatalf("未确认时关联被改成 %q", product.PddGoodsID)
|
||||
}
|
||||
if _, err := AssociateShopeePdd(db, "1001", pddURLB, true); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
product, _ = repository.GetShopeeProductByGoodsID(db, "1001")
|
||||
if product.PddGoodsID != "937122477375" {
|
||||
t.Fatalf("确认后关联 = %q", product.PddGoodsID)
|
||||
}
|
||||
old, _ := repository.GetPddProductByGoodsID(db, "737116531267")
|
||||
if old == nil {
|
||||
t.Fatal("换品不应删除旧 PDD 档案")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAssociateShopeePdd_软删除商品可复活(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
seedShopeeProduct(t, db, "1001", "商品一")
|
||||
repository.EnsurePddProduct(db, "737116531267", pddURLA)
|
||||
if _, err := repository.SoftDeletePddProducts(db, []string{"737116531267"}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := AssociateShopeePdd(db, "1001", pddURLA, false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
p, _ := repository.GetPddProductByGoodsID(db, "737116531267")
|
||||
if p == nil || p.IsDeleted() {
|
||||
t.Fatal("关联应复活软删除的 PDD 商品")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateShopeePddCollectTask_按当前关联创建(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
seedShopeeProduct(t, db, "1001", "商品一")
|
||||
AssociateShopeePdd(db, "1001", pddURLA, false)
|
||||
result, err := CreateShopeePddCollectTask(db, "1001")
|
||||
if err != nil || result.Created != 1 {
|
||||
t.Fatalf("创建结果 = %+v, err=%v", result, err)
|
||||
}
|
||||
_, _, _, ok := collectTaskOf(t, db, "737116531267")
|
||||
if !ok {
|
||||
t.Fatal("没有创建采集任务")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user