feat: 增加规格匹配建议与决策审计 (#90)
This commit is contained in:
@@ -130,6 +130,82 @@ func TestSybMapping_换品和选项消失都会失效(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestSybMapping_建议审计追加陈旧保护与事务回滚(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
order := seedWorkflowOrder(t, db, "SYB-AUDIT", "SP-AUDIT", "灰色,L建議53-57公斤")
|
||||
if _, err := AssociateShopeePdd(db, "SP-AUDIT", pddURLA, false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw := `{"goods_id":"737116531267","dimensions":[{"key":"color","name":"颜色分类"},{"key":"size","name":"尺码"}],"skus":[{"options":{"color":"灰色中长款","size":"L(80-115斤)"},"price_cent":3990,"available":true},{"options":{"color":"黑色","size":"L(80-115斤)"},"price_cent":3990,"available":true}]}`
|
||||
if err := repository.SetCollectResult(db, "737116531267", "PDD", "", raw); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
detail, err := GetSybProcessingDetail(db, order.SybID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var suggested, other string
|
||||
for _, c := range detail.PddChoices {
|
||||
if c.Recommended {
|
||||
suggested = c.Key
|
||||
} else {
|
||||
other = c.Key
|
||||
}
|
||||
}
|
||||
if suggested == "" || detail.ContextVersion == "" {
|
||||
t.Fatalf("无建议: %+v", detail)
|
||||
}
|
||||
var unopenedMappings, unopenedDecisions int
|
||||
db.QueryRow(`SELECT COUNT(*) FROM spec_mappings WHERE shopee_goods_id='SP-AUDIT'`).Scan(&unopenedMappings)
|
||||
db.QueryRow(`SELECT COUNT(*) FROM spec_mapping_decisions WHERE shopee_goods_id='SP-AUDIT'`).Scan(&unopenedDecisions)
|
||||
if unopenedMappings != 0 || unopenedDecisions != 0 {
|
||||
t.Fatal("只打开或关闭弹窗不得写库")
|
||||
}
|
||||
if err := SaveSybMapping(db, order.SybID, other, "USR", detail.ContextVersion); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := SaveSybMapping(db, order.SybID, suggested, "USR", mappingContextVersionMust(t, db, order.SybID)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var total, accepted int
|
||||
db.QueryRow(`SELECT COUNT(*),SUM(accepted) FROM spec_mapping_decisions WHERE shopee_goods_id='SP-AUDIT'`).Scan(&total, &accepted)
|
||||
if total != 2 || accepted != 1 {
|
||||
t.Fatalf("审计 total=%d accepted=%d", total, accepted)
|
||||
}
|
||||
old := mappingContextVersionMust(t, db, order.SybID)
|
||||
if err := repository.SetCollectResult(db, "737116531267", "PDD2", "", raw+" "); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := SaveSybMapping(db, order.SybID, suggested, "USR", old); err == nil {
|
||||
t.Fatal("陈旧弹窗必须拒绝")
|
||||
}
|
||||
before := suggested
|
||||
mustExecService(t, db, `DROP TABLE spec_mapping_decisions`)
|
||||
if err := SaveSybMapping(db, order.SybID, other, "USR", mappingContextVersionMust(t, db, order.SybID)); err == nil {
|
||||
t.Fatal("审计失败必须回滚")
|
||||
}
|
||||
var current string
|
||||
db.QueryRow(`SELECT pdd_option_key FROM spec_mappings WHERE shopee_goods_id='SP-AUDIT'`).Scan(¤t)
|
||||
if current != before {
|
||||
t.Fatal("映射未回滚")
|
||||
}
|
||||
}
|
||||
|
||||
func mappingContextVersionMust(t *testing.T, db *sql.DB, id string) string {
|
||||
t.Helper()
|
||||
c, e := repository.GetSybOrderContext(db, id)
|
||||
if e != nil {
|
||||
t.Fatal(e)
|
||||
}
|
||||
return mappingContextVersion(*c)
|
||||
}
|
||||
func mustExecService(t *testing.T, db *sql.DB, q string) {
|
||||
t.Helper()
|
||||
if _, e := db.Exec(q); e != nil {
|
||||
t.Fatal(e)
|
||||
}
|
||||
}
|
||||
|
||||
func stringsReplaceGoodsID(raw string) string {
|
||||
return `{"goods_id":"937122477375","price_granularity":"sku","dimensions":[{"key":"color","name":"颜色"},{"key":"size","name":"尺码"},{"key":"style","name":"款式"}],"skus":[{"options":{"style":"常规","size":"M码","color":"黑色"},"price_cent":3990,"available":true}]}`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user