package util_test import ( "strings" "testing" "github.com/wangjia/pay/internal/util" ) // jiu 反馈波:随机部分 8→16 hex(64 位)加固防生日碰撞;断言新长度/格式, // 并确认仍在 DB out_trade_no 列 size:64 与支付宝 out_trade_no ≤64 字符上限内。 func TestNewOutTradeNoSuffixLength(t *testing.T) { no := util.NewOutTradeNo("yanmei") parts := strings.Split(no, "-") if len(parts) != 3 { t.Fatalf("out_trade_no = %q, want 3 段(code-ts-suffix)", no) } suffix := parts[2] if len(suffix) != 16 { t.Fatalf("随机后缀长度 = %d, want 16", len(suffix)) } if len(no) > 64 { t.Fatalf("out_trade_no 长度 = %d, want <= 64", len(no)) } } // merchantCode 拉满 16 字符时,总长仍须 <= 64(alipay out_trade_no 上限)。 func TestNewOutTradeNoMaxLength(t *testing.T) { no := util.NewOutTradeNo("0123456789abcdefEXTRA") // >16 字符,函数内部会截断到 16 if len(no) > 64 { t.Fatalf("out_trade_no 长度 = %d, want <= 64: %q", len(no), no) } } // 两次生成不应重复(随机后缀 + 时间戳兜底)。 func TestNewOutTradeNoUnique(t *testing.T) { a := util.NewOutTradeNo("pay") b := util.NewOutTradeNo("pay") if a == b { t.Fatalf("两次生成的 out_trade_no 相同: %q", a) } }