|
|
|
@@ -19,48 +19,49 @@ func TestProcessStageDerivesAllUserFacingStages(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
want string
|
|
|
|
|
set func(*batchPreviewDataset, *BatchPreviewItem)
|
|
|
|
|
name string
|
|
|
|
|
want string
|
|
|
|
|
wantAction string
|
|
|
|
|
set func(*batchPreviewDataset, *BatchPreviewItem)
|
|
|
|
|
}{
|
|
|
|
|
{"待人工处理", ProcessStageManualAction, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"待人工处理", ProcessStageManualAction, "reparse", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
row := d.sybByID[1]
|
|
|
|
|
row.ParseStatus = models.SYBParseStatusFailed
|
|
|
|
|
d.sybByID[1] = row
|
|
|
|
|
}},
|
|
|
|
|
{"未关联 PDD", ProcessStagePDDUnlinked, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"未关联 PDD", ProcessStagePDDUnlinked, processActionOpenPDDLink, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
row := d.shopeeByID[2]
|
|
|
|
|
row.PDDProductID = nil
|
|
|
|
|
d.shopeeByID[2] = row
|
|
|
|
|
}},
|
|
|
|
|
{"PDD 待采集", ProcessStagePDDPending, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"PDD 待采集", ProcessStagePDDPending, "open_pdd", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
row := d.pddByID[3]
|
|
|
|
|
row.Status = "pending"
|
|
|
|
|
d.pddByID[3] = row
|
|
|
|
|
}},
|
|
|
|
|
{"PDD 采集中", ProcessStagePDDCollecting, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"PDD 采集中", ProcessStagePDDCollecting, "open_pdd", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
row := d.pddByID[3]
|
|
|
|
|
row.Status = "pending"
|
|
|
|
|
d.pddByID[3] = row
|
|
|
|
|
d.latestCollectionByPDD[3] = models.CollectionTask{ID: 8, PDDProductID: 3, Status: models.TaskStatusRunning}
|
|
|
|
|
}},
|
|
|
|
|
{"PDD 采集失败", ProcessStagePDDCollectionFail, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"PDD 采集失败", ProcessStagePDDCollectionFail, "open_pdd", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
row := d.pddByID[3]
|
|
|
|
|
row.Status = "pending"
|
|
|
|
|
d.pddByID[3] = row
|
|
|
|
|
d.latestCollectionByPDD[3] = models.CollectionTask{ID: 8, PDDProductID: 3, Status: models.TaskStatusFailed}
|
|
|
|
|
}},
|
|
|
|
|
{"颜色待匹配", ProcessStageColorMapping, func(_ *batchPreviewDataset, p *BatchPreviewItem) { p.ReasonCode = CodeMappingRequired }},
|
|
|
|
|
{"可创建采购", ProcessStagePurchaseReady, func(_ *batchPreviewDataset, p *BatchPreviewItem) { p.Eligible = true }},
|
|
|
|
|
{"已创建任务", ProcessStageTaskCreated, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"颜色待匹配", ProcessStageColorMapping, "open_mapping", func(_ *batchPreviewDataset, p *BatchPreviewItem) { p.ReasonCode = CodeMappingRequired }},
|
|
|
|
|
{"可创建采购", ProcessStagePurchaseReady, "", func(_ *batchPreviewDataset, p *BatchPreviewItem) { p.Eligible = true }},
|
|
|
|
|
{"已创建任务", ProcessStageTaskCreated, "open_task", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
sybID := uint64(1)
|
|
|
|
|
d.latestTaskBySYB[1] = models.PurchaseTask{ID: 11, SYBProductID: &sybID, Status: models.PurchaseTaskStatusRunning}
|
|
|
|
|
}},
|
|
|
|
|
{"采购成功", ProcessStagePurchaseSucceeded, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"采购成功", ProcessStagePurchaseSucceeded, "open_task", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
sybID := uint64(1)
|
|
|
|
|
d.latestTaskBySYB[1] = models.PurchaseTask{ID: 12, SYBProductID: &sybID, Status: models.PurchaseTaskStatusOrderCreated}
|
|
|
|
|
}},
|
|
|
|
|
{"待人工核对", ProcessStageOrderReview, func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
{"待人工核对", ProcessStageOrderReview, "open_task", func(d *batchPreviewDataset, _ *BatchPreviewItem) {
|
|
|
|
|
sybID := uint64(1)
|
|
|
|
|
d.latestTaskBySYB[1] = models.PurchaseTask{ID: 13, SYBProductID: &sybID, Status: models.PurchaseTaskStatusOrderResultUnknown}
|
|
|
|
|
}},
|
|
|
|
@@ -71,8 +72,8 @@ func TestProcessStageDerivesAllUserFacingStages(t *testing.T) {
|
|
|
|
|
preview := BatchPreviewItem{SYBProductID: 1}
|
|
|
|
|
tt.set(&dataset, &preview)
|
|
|
|
|
got := processStageFromDataset(1, dataset, preview)
|
|
|
|
|
if got.Stage != tt.want || got.Label != tt.name {
|
|
|
|
|
t.Fatalf("got stage=%q label=%q, want %q/%q", got.Stage, got.Label, tt.want, tt.name)
|
|
|
|
|
if got.Stage != tt.want || got.Label != tt.name || got.NextAction != tt.wantAction {
|
|
|
|
|
t.Fatalf("got stage=%q label=%q action=%q, want %q/%q/%q", got.Stage, got.Label, got.NextAction, tt.want, tt.name, tt.wantAction)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
@@ -83,3 +84,20 @@ func TestValidProcessStageRejectsInternalOrUnknownValues(t *testing.T) {
|
|
|
|
|
t.Fatal("process stage validation accepted an internal or unknown value")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestProcessStageMissingPDDUsesRelinkAction(t *testing.T) {
|
|
|
|
|
pddID := uint64(3)
|
|
|
|
|
shopeeID := uint64(2)
|
|
|
|
|
dataset := batchPreviewDataset{
|
|
|
|
|
sybByID: map[uint64]models.SYBProduct{1: {ID: 1, ParseStatus: models.SYBParseStatusSuccess, ShopeeProductID: &shopeeID}},
|
|
|
|
|
shopeeByID: map[uint64]models.ShopeeProduct{2: {ID: 2, PDDProductID: &pddID}},
|
|
|
|
|
pddByID: map[uint64]models.PDDProduct{},
|
|
|
|
|
latestTaskBySYB: make(map[uint64]models.PurchaseTask),
|
|
|
|
|
latestCollectionByPDD: make(map[uint64]models.CollectionTask),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
got := processStageFromDataset(1, dataset, BatchPreviewItem{SYBProductID: 1})
|
|
|
|
|
if got.Stage != ProcessStagePDDUnlinked || got.NextAction != processActionOpenPDDLink || got.Reason != "关联的 PDD 商品不存在,请重新关联" {
|
|
|
|
|
t.Fatalf("missing PDD did not request relink: %+v", got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|