feat(t239): persist freight item metadata
This commit is contained in:
@@ -57,6 +57,8 @@ func TestFreightImportIsAtomicIdempotentAndRevisioned(t *testing.T) {
|
||||
t.Fatalf("StartFreightSync() error = %v", err)
|
||||
}
|
||||
batch := freightBatch(910, "a", "b")
|
||||
price := int64(12950)
|
||||
batch.Orders[0].Items[0].OriginalUnitPriceMinor = &price
|
||||
if err := store.CompleteFreightSync(
|
||||
ctx,
|
||||
first,
|
||||
@@ -74,10 +76,16 @@ func TestFreightImportIsAtomicIdempotentAndRevisioned(t *testing.T) {
|
||||
if err != nil || len(detail.Items) != 2 {
|
||||
t.Fatalf("detail = %+v, error = %v", detail, err)
|
||||
}
|
||||
if detail.Items[0].OriginalUnitPriceMinor == nil ||
|
||||
*detail.Items[0].OriginalUnitPriceMinor != price ||
|
||||
detail.Items[0].OriginalCurrency != domain.FreightCurrencyTWD {
|
||||
t.Fatalf("item price metadata = %+v", detail.Items[0])
|
||||
}
|
||||
|
||||
second := freightRun(904, userID, now.Add(time.Minute))
|
||||
createAndStartFreightRun(t, store, second, "freight-key-2", "3")
|
||||
unchanged := freightBatch(920, "a", "b")
|
||||
unchanged.Orders[0].Items[0].OriginalUnitPriceMinor = &price
|
||||
if err := store.CompleteFreightSync(
|
||||
ctx,
|
||||
second,
|
||||
@@ -96,6 +104,7 @@ func TestFreightImportIsAtomicIdempotentAndRevisioned(t *testing.T) {
|
||||
third := freightRun(905, userID, now.Add(2*time.Minute))
|
||||
createAndStartFreightRun(t, store, third, "freight-key-3", "4")
|
||||
changed := freightBatch(930, "a", "c")
|
||||
changed.Orders[0].Items[0].OriginalUnitPriceMinor = &price
|
||||
changed.Orders[0].CanonicalSHA256 = repeatHex("d")
|
||||
changed.Orders[0].Items[1].Title = "变化后的商品"
|
||||
changed.Orders[0].Items[1].CanonicalSHA256 = repeatHex("e")
|
||||
@@ -113,10 +122,18 @@ func TestFreightImportIsAtomicIdempotentAndRevisioned(t *testing.T) {
|
||||
detail.Items[1].Revision != 2 {
|
||||
t.Fatalf("changed revisions = %+v", detail)
|
||||
}
|
||||
if _, err := db.Exec(
|
||||
`UPDATE freight_order_items SET original_unit_price_minor = NULL`,
|
||||
); err != nil {
|
||||
t.Fatalf("clear metadata before rollback guard test: %v", err)
|
||||
}
|
||||
runner, err := migration.New(db)
|
||||
if err != nil {
|
||||
t.Fatalf("migration.New() error = %v", err)
|
||||
}
|
||||
if err := runner.Down(ctx); err != nil {
|
||||
t.Fatalf("metadata migration down: %v", err)
|
||||
}
|
||||
if err := runner.Down(ctx); err != nil {
|
||||
t.Fatalf("date sync migration down: %v", err)
|
||||
}
|
||||
@@ -251,6 +268,9 @@ func TestFreightDateSyncAdvancesWatermarkOnlyOnWholeBatchSuccess(
|
||||
}
|
||||
|
||||
runner, _ := migration.New(db)
|
||||
if err := runner.Down(ctx); err != nil {
|
||||
t.Fatalf("metadata migration down: %v", err)
|
||||
}
|
||||
if err := runner.Down(ctx); err == nil {
|
||||
t.Fatal("date sync migration down succeeded with retained watermark")
|
||||
}
|
||||
@@ -334,22 +354,24 @@ func freightBatch(index int, firstHash, secondHash string) domain.FreightImportB
|
||||
CanonicalSHA256: repeatHex("c"),
|
||||
Items: []domain.FreightImportItem{
|
||||
{
|
||||
ID: uuid(index + 1),
|
||||
ExternalItemID: "88",
|
||||
Title: "商品一",
|
||||
ProductSpec: "黑色,L",
|
||||
SKU: "BLACK-L",
|
||||
Quantity: &quantityOne,
|
||||
CanonicalSHA256: repeatHex(firstHash),
|
||||
ID: uuid(index + 1),
|
||||
ExternalItemID: "88",
|
||||
Title: "商品一",
|
||||
ProductSpec: "黑色,L",
|
||||
SKU: "黑色,L",
|
||||
Quantity: &quantityOne,
|
||||
OriginalCurrency: domain.FreightCurrencyTWD,
|
||||
CanonicalSHA256: repeatHex(firstHash),
|
||||
},
|
||||
{
|
||||
ID: uuid(index + 2),
|
||||
ExternalItemID: "89",
|
||||
Title: "商品二",
|
||||
ProductSpec: "白色,M",
|
||||
SKU: "WHITE-M",
|
||||
Quantity: &quantityTwo,
|
||||
CanonicalSHA256: repeatHex(secondHash),
|
||||
ID: uuid(index + 2),
|
||||
ExternalItemID: "89",
|
||||
Title: "商品二",
|
||||
ProductSpec: "白色,M",
|
||||
SKU: "白色,M",
|
||||
Quantity: &quantityTwo,
|
||||
OriginalCurrency: domain.FreightCurrencyTWD,
|
||||
CanonicalSHA256: repeatHex(secondHash),
|
||||
},
|
||||
},
|
||||
}}}
|
||||
|
||||
Reference in New Issue
Block a user