99 lines
3.2 KiB
Go
99 lines
3.2 KiB
Go
package identity
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
userdomain "hyapp/services/user-service/internal/domain/user"
|
|
)
|
|
|
|
func TestGenerateAABBCCCandidates(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
candidates := generateAABBCCCandidates()
|
|
if len(candidates) != 1000 {
|
|
t.Fatalf("candidate count = %d, want 1000", len(candidates))
|
|
}
|
|
|
|
seen := make(map[string]struct{}, len(candidates))
|
|
for _, candidate := range candidates {
|
|
if len(candidate) != 6 {
|
|
t.Fatalf("candidate %q length = %d, want 6", candidate, len(candidate))
|
|
}
|
|
if candidate[0] != candidate[1] || candidate[2] != candidate[3] || candidate[4] != candidate[5] {
|
|
t.Fatalf("candidate %q does not match AABBCC", candidate)
|
|
}
|
|
if _, ok := seen[candidate]; ok {
|
|
t.Fatalf("candidate %q is duplicated", candidate)
|
|
}
|
|
seen[candidate] = struct{}{}
|
|
}
|
|
}
|
|
|
|
func TestGeneratePrettyDisplayIDCandidatesForMarketRules(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
ruleType string
|
|
want []string
|
|
}{
|
|
{name: "repeat 4A", ruleType: userdomain.PrettyDisplayIDRuleAAAA, want: []string{"0000", "1111", "2222"}},
|
|
{name: "ABAB", ruleType: userdomain.PrettyDisplayIDRuleABAB, want: []string{"0101", "0202", "0303"}},
|
|
{name: "ABBA", ruleType: userdomain.PrettyDisplayIDRuleABBA, want: []string{"0110", "0220", "0330"}},
|
|
{name: "ascending", ruleType: userdomain.PrettyDisplayIDRuleABCD, want: []string{"0123", "1234", "2345"}},
|
|
{name: "descending", ruleType: userdomain.PrettyDisplayIDRuleDCBA, want: []string{"3210", "4321", "5432"}},
|
|
{name: "ABCABC", ruleType: userdomain.PrettyDisplayIDRuleABCABC, want: []string{"012012", "123123", "234234"}},
|
|
{name: "love", ruleType: userdomain.PrettyDisplayIDRuleLove, want: []string{"520", "521", "1314"}},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
tc := tc
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
candidates, err := generatePrettyDisplayIDCandidates(tc.ruleType, "")
|
|
if err != nil {
|
|
t.Fatalf("generate candidates failed: %v", err)
|
|
}
|
|
for index, want := range tc.want {
|
|
if candidates[index] != want {
|
|
t.Fatalf("candidate[%d] = %q, want %q", index, candidates[index], want)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGeneratePrettyDisplayIDCandidatesWithConfig(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
candidates, err := generatePrettyDisplayIDCandidates(userdomain.PrettyDisplayIDRuleAABB, `{"digits":["6","8","9"],"exclude_digits":["9"],"prefix":"VIP"}`)
|
|
if err != nil {
|
|
t.Fatalf("generate candidates failed: %v", err)
|
|
}
|
|
if strings.Join(candidates, ",") != "VIP6688,VIP8866" {
|
|
t.Fatalf("candidates = %#v", candidates)
|
|
}
|
|
|
|
custom, err := generatePrettyDisplayIDCandidates(userdomain.PrettyDisplayIDRuleCustomValues, `{"values":["VIP2026","ملك123","VIP!"]}`)
|
|
if err != nil {
|
|
t.Fatalf("generate custom candidates failed: %v", err)
|
|
}
|
|
if strings.Join(custom, ",") != "VIP2026,ملك123" {
|
|
t.Fatalf("custom candidates = %#v", custom)
|
|
}
|
|
}
|
|
|
|
func TestGenerateDatePrettyDisplayIDCandidates(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
candidates, err := generatePrettyDisplayIDCandidates(userdomain.PrettyDisplayIDRuleDateYYYYMMDD, `{"start_date":"2026-06-09","end_date":"2026-06-11"}`)
|
|
if err != nil {
|
|
t.Fatalf("generate date candidates failed: %v", err)
|
|
}
|
|
if strings.Join(candidates, ",") != "20260609,20260610,20260611" {
|
|
t.Fatalf("date candidates = %#v", candidates)
|
|
}
|
|
}
|