package httpapi import ( "os" "regexp" "testing" "github.com/google/uuid" "github.com/sundynix/pets-be/internal/config" "github.com/sundynix/pets-be/internal/database" ) func TestDefaultNicknamePostgres(t *testing.T) { if os.Getenv("PETS_ADMIN_INTEGRATION") != "1" { t.Skip("PostgreSQL integration disabled") } cfg, err := config.Load() if err != nil { t.Fatal(err) } db, err := database.Open(cfg.Postgres, true) if err != nil { t.Fatal(err) } sqlDB, _ := db.DB() defer sqlDB.Close() tx := db.Begin() if tx.Error != nil { t.Fatal(tx.Error) } defer tx.Rollback() api := New(tx, nil, cfg) seen := map[string]bool{} for range 12 { openID := "nickname-test:" + uuid.NewString() user, err := api.findOrCreateUser(openID, "") if err != nil { t.Fatal(err) } if !regexp.MustCompile(`^毛孩家长\d{4,6}$`).MatchString(user.Nickname) { t.Fatalf("unexpected name %q", user.Nickname) } if seen[user.Nickname] { t.Fatalf("duplicate name %q", user.Nickname) } seen[user.Nickname] = true again, err := api.findOrCreateUser(openID, "不应覆盖的名字") if err != nil { t.Fatal(err) } if again.ID != user.ID || again.Nickname != user.Nickname { t.Fatal("relogin changed existing user") } } custom, err := api.findOrCreateUser("nickname-test:"+uuid.NewString(), "小豆的家长") if err != nil { t.Fatal(err) } if custom.Nickname != "小豆的家长" { t.Fatal("custom nickname lost") } again, err := api.findOrCreateUser(custom.OpenID, "") if err != nil { t.Fatal(err) } if again.Nickname != custom.Nickname { t.Fatal("relogin replaced custom nickname") } }