Files
goauto/server/app/goauto/sybinnercode/match_layout_test.go
T

69 lines
3.3 KiB
Go

package sybinnercode
import (
"context"
"testing"
"go-admin/app/goauto/models"
"go-admin/app/goauto/sybclient"
)
func TestMatchEvidenceNormalizesLayoutOnBothSides(t *testing.T) {
for _, layout := range []string{"\n", "\r", "\r\n", "\t"} {
for _, sourceHasLayout := range []bool{true, false} {
source, candidate := "市场-档口甲#731", "市场-档口甲#731"
if sourceHasLayout {
source = "市场-" + layout + "档口甲#731"
} else {
candidate = "市场-" + layout + "档口甲#731"
}
item := detail(1, "黑色,L", 1, "", candidate, "")
matches, reason := matchEvidence(source, source, []sybclient.DetailItem{item})
if reason != "" || len(matches) != 1 || !stallMatches(source, item) {
t.Fatalf("layout=%q sourceLayout=%v: matches=%v reason=%s", layout, sourceHasLayout, matches, reason)
}
if item.Raw["variationSku"] != candidate {
t.Fatal("comparison modified raw candidate evidence")
}
}
}
item := detail(1, "黑色,L", 1, "SKU-\n1", "", "")
if matches, reason := matchEvidence("", "SKU-1", []sybclient.DetailItem{item}); reason != "" || len(matches) != 1 {
t.Fatalf("raw sku layout did not match: %v %s", matches, reason)
}
}
func TestMatchLayoutPreservesIdentityAndAmbiguityChecks(t *testing.T) {
for _, candidate := range []string{"市场-档口乙#731", "市场-档口甲#732", "市场-档 口甲#731", "市场-档口甲#PDD7319"} {
item := detail(1, "黑色,L", 1, "", candidate, "")
matches, _ := matchEvidence("市场-\n档口甲#731", "市场-\n档口甲#731", []sybclient.DetailItem{item})
if len(matches) != 0 {
t.Fatalf("different identity unexpectedly matched: %q", candidate)
}
}
items := []sybclient.DetailItem{detail(1, "黑色,L", 1, "SKU-1", "", ""), detail(2, "黑色,L", 1, "SKU-\n1", "", "")}
if matches, reason := matchEvidence("", "SKU-1", items); len(matches) != 0 || reason == "" {
t.Fatal("layout-equivalent duplicate SKUs must remain ambiguous")
}
items = []sybclient.DetailItem{detail(1, "黑色,L", 1, "SKU-1", "市场-档口乙#732", ""), detail(2, "黑色,L", 1, "OTHER", "市场-档口甲#731", "")}
if matches, reason := matchEvidence("市场-\n档口甲#731", "SKU-\t1", items); len(matches) != 0 || reason == "" {
t.Fatal("SKU/stall conflict must remain rejected")
}
if normalizeMatchLayout("A B") == normalizeMatchLayout("AB") || normalizeMatchLayout("a") == normalizeMatchLayout("A") {
t.Fatal("ordinary spaces and case must remain significant")
}
}
func TestPlanRecordWithLayoutEvidenceKeepsOriginalValues(t *testing.T) {
record := matchRecord("ORDER-1", "市场-\n档口甲#731", "市场-\n档口甲#731", "IC-1")
item := detail(20, "黑色,L", 1, "", "市场-档口甲#731", "")
reader := &fakeMatchReader{rows: map[string][]sybclient.StockRow{"ORDER-1": {{ID: 10}}}, stocks: map[int64]sybclient.StockDetail{10: {ID: 10, Details: []sybclient.DetailItem{item}}}}
plan, status, reason, err := planRecord(context.Background(), reader, record, map[int64]bool{})
if err != nil || status != models.SYBInnerCodeReady || plan == nil || plan.DetailID != 20 {
t.Fatalf("expected unique ready plan, got %v %s %s %v", plan, status, reason, err)
}
if record.Stall != "市场-\n档口甲#731" || record.SourceSKURaw != record.Stall || plan.SYBVariationSKU != "市场-档口甲#731" {
t.Fatal("original import and plan evidence must remain unchanged")
}
}