feat(t222): add freight ingestion admin flow
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package usecase
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"cmroubao/backend-api/internal/domain"
|
||||
)
|
||||
|
||||
func TestFreightNormalizationHashExcludesInternalIDs(t *testing.T) {
|
||||
source := validFreightSource()
|
||||
firstService := &FreightService{ids: &sequenceIDs{next: 10}}
|
||||
first, err := firstService.normalize(source)
|
||||
if err != nil {
|
||||
t.Fatalf("first normalize error = %v", err)
|
||||
}
|
||||
secondService := &FreightService{ids: &sequenceIDs{next: 100}}
|
||||
second, err := secondService.normalize(source)
|
||||
if err != nil {
|
||||
t.Fatalf("second normalize error = %v", err)
|
||||
}
|
||||
if first.Orders[0].ID == second.Orders[0].ID {
|
||||
t.Fatal("test IDs did not differ")
|
||||
}
|
||||
if first.Orders[0].CanonicalSHA256 !=
|
||||
second.Orders[0].CanonicalSHA256 {
|
||||
t.Fatalf(
|
||||
"canonical hash depends on internal ID: %s != %s",
|
||||
first.Orders[0].CanonicalSHA256,
|
||||
second.Orders[0].CanonicalSHA256,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFreightNormalizationRejectsConflictingIdentityAndInvalidTime(
|
||||
t *testing.T,
|
||||
) {
|
||||
duplicate := validFreightSource()
|
||||
duplicate.Orders[0].Items = append(
|
||||
duplicate.Orders[0].Items,
|
||||
duplicate.Orders[0].Items[0],
|
||||
)
|
||||
service := &FreightService{ids: &sequenceIDs{}}
|
||||
if _, err := service.normalize(duplicate); err == nil {
|
||||
t.Fatal("duplicate item normalize error = nil")
|
||||
}
|
||||
|
||||
invalidTime := validFreightSource()
|
||||
value := "not-a-time"
|
||||
invalidTime.Orders[0].SourceCreatedAt = &value
|
||||
if _, err := service.normalize(invalidTime); err == nil {
|
||||
t.Fatal("invalid source time normalize error = nil")
|
||||
}
|
||||
}
|
||||
|
||||
func validFreightSource() domain.FreightSourceBatch {
|
||||
shop := "测试店铺"
|
||||
sourceCreatedAt := "2026-07-28 08:00:00"
|
||||
orderStatus := "0"
|
||||
purchaseStatus := "1"
|
||||
thumb := "190"
|
||||
itemPurchaseStatus := "0"
|
||||
quantity := 2
|
||||
canceled := false
|
||||
return domain.FreightSourceBatch{
|
||||
SchemaVersion: 1,
|
||||
Query: domain.FreightSourceQuery{
|
||||
Mode: domain.FreightSyncOrderNumber,
|
||||
},
|
||||
Orders: []domain.FreightSourceOrder{{
|
||||
ExternalStockID: "12",
|
||||
SourceCode: "SOURCE-12",
|
||||
ShopName: &shop,
|
||||
SourceCreatedAt: &sourceCreatedAt,
|
||||
OrderStatus: &orderStatus,
|
||||
PurchaseStatus: &purchaseStatus,
|
||||
IsCanceled: &canceled,
|
||||
Items: []domain.FreightSourceItem{{
|
||||
ExternalItemID: "88",
|
||||
Title: "商品",
|
||||
ProductSpec: "黑色,L",
|
||||
SKU: "BLACK-L",
|
||||
Quantity: &quantity,
|
||||
ProductThumbRef: &thumb,
|
||||
PurchaseStatus: &itemPurchaseStatus,
|
||||
}},
|
||||
}},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user