package userstore import ( "context" "testing" ) func TestRandomUsernameUnique(t *testing.T) { seen := map[string]struct{}{} for i := 0; i < 20; i++ { u, err := RandomUsername() if err != nil || len(u) != 10 { t.Fatalf("got %q %v", u, err) } if u[0] < 'a' || u[0] > 'z' { t.Fatalf("must start with letter: %q", u) } seen[u] = struct{}{} } if len(seen) < 15 { t.Fatalf("expected diverse usernames, got %d", len(seen)) } } func TestCreateMemberAndChangePassword(t *testing.T) { s := NewMemoryStore() ten, err := s.CreateTenant(context.Background(), "测试公司", "acme") if err != nil { t.Fatal(err) } uname, err := AllocUniqueUsername(context.Background(), s.UsernameExists) if err != nil { t.Fatal(err) } u, plain, err := s.CreateMember(context.Background(), ten.TenantID, uname, "", "管理员", "管理员", 0) if err != nil || plain == "" { t.Fatalf("u=%v plain=%q err=%v", u, plain, err) } if _, err := s.Login(context.Background(), uname, plain); err != nil { t.Fatal(err) } if err := s.ChangePassword(context.Background(), u.UserID, plain, "newpass99"); err != nil { t.Fatal(err) } if _, err := s.Login(context.Background(), uname, "newpass99"); err != nil { t.Fatal(err) } if err := s.ChangePassword(context.Background(), u.UserID, "wrong", "x"); err == nil { t.Fatal("expected old password check") } }