feat: 保存并展示 PDD 店铺与价格采样信息 (#31)
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -283,8 +284,10 @@ func pddProductState(t *testing.T, db *sql.DB, goodsID string) (status, title, s
|
||||
|
||||
const collectBody = `{"task_version":1,"attempt_id":"a-1","result_type":"collect",
|
||||
"pdd_data":{"schema_version":1,"goods_id":"PDD-1","title":"测试商品",
|
||||
"shop_name":"测试旗舰店","price_granularity":"color",
|
||||
"dimensions":[{"key":"color","name":"颜色分类"}],
|
||||
"skus":[{"options":{"color":"黑色","size":"M"},"price_cent":1256,
|
||||
"price_observed_at":{"color":"黑色","size":"M"},
|
||||
"available":true,"raw_price":"¥12.56"}]}}`
|
||||
|
||||
func TestSubmitResult_采集结果写入PDD商品(t *testing.T) {
|
||||
@@ -307,6 +310,62 @@ func TestSubmitResult_采集结果写入PDD商品(t *testing.T) {
|
||||
if skus == "" {
|
||||
t.Error("skus_json 应被写入,实际为空")
|
||||
}
|
||||
var shop sql.NullString
|
||||
if err := db.QueryRow(
|
||||
`SELECT shop_name FROM pdd_products WHERE goods_id = ?`, "PDD-1",
|
||||
).Scan(&shop); err != nil {
|
||||
t.Fatalf("读取店铺名失败: %v", err)
|
||||
}
|
||||
if !shop.Valid || shop.String != "测试旗舰店" {
|
||||
t.Errorf("店铺名应从采集结果落库,实际 %+v", shop)
|
||||
}
|
||||
if !strings.Contains(skus, `"price_granularity":"color"`) ||
|
||||
!strings.Contains(skus, `"price_observed_at"`) {
|
||||
t.Errorf("价格粒度与实测组合应保留在 skus_json,实际 %s", skus)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubmitResult_没有店铺名时不覆盖已有值(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
insertPddProduct(t, db, "PDD-1")
|
||||
if _, err := db.Exec(
|
||||
`UPDATE pdd_products SET shop_name = '旧店铺' WHERE goods_id = 'PDD-1'`,
|
||||
); err != nil {
|
||||
t.Fatalf("准备已有店铺名失败: %v", err)
|
||||
}
|
||||
insertCollectTask(t, db, "TASK-C", "client-001", "SHOPEE-1", "PDD-1")
|
||||
claimTask(t, db, "TASK-C", "client-001")
|
||||
|
||||
body := `{"attempt_id":"a-1","result_type":"collect",
|
||||
"pdd_data":{"goods_id":"PDD-1","title":"测试商品",
|
||||
"skus":[{"options":{"color":"黑色"},"price_cent":100,"available":true}]}}`
|
||||
if _, err := SubmitResult(db, "TASK-C", "client-001", "key-no-shop", []byte(body)); err != nil {
|
||||
t.Fatalf("老版本报文不应失败: %v", err)
|
||||
}
|
||||
|
||||
var shop string
|
||||
if err := db.QueryRow(
|
||||
`SELECT shop_name FROM pdd_products WHERE goods_id = 'PDD-1'`,
|
||||
).Scan(&shop); err != nil {
|
||||
t.Fatalf("读取店铺名失败: %v", err)
|
||||
}
|
||||
if shop != "旧店铺" {
|
||||
t.Errorf("缺少 shop_name 时不应覆盖已有值,实际 %q", shop)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubmitResult_拒绝未知价格采样粒度(t *testing.T) {
|
||||
db := newTestDB(t)
|
||||
insertPddProduct(t, db, "PDD-1")
|
||||
insertCollectTask(t, db, "TASK-C", "client-001", "SHOPEE-1", "PDD-1")
|
||||
claimTask(t, db, "TASK-C", "client-001")
|
||||
|
||||
body := `{"attempt_id":"a-1","result_type":"collect",
|
||||
"pdd_data":{"goods_id":"PDD-1","price_granularity":"unknown",
|
||||
"skus":[{"options":{"color":"黑色"},"price_cent":100,"available":true}]}}`
|
||||
if _, err := SubmitResult(db, "TASK-C", "client-001", "key-bad-granularity", []byte(body)); err == nil {
|
||||
t.Fatal("未知 price_granularity 应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
// 采到 0 个规格必须算失败——数据对业务毫无用处,
|
||||
|
||||
Reference in New Issue
Block a user