account.checkUsername / channels.checkUsername / bots.checkUsername said a reserved name was available and only updateUsername rejected it. Add the blocklist check to peerUsernameAvailable (covers account + channel, both backends) and to bots.Service.CheckUsername, so the client shows "username is taken" immediately.
37 lines
1.3 KiB
Go
37 lines
1.3 KiB
Go
package memory
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"telesrv/internal/domain"
|
|
)
|
|
|
|
func TestCheckUsernameReportsReservedAsTaken(t *testing.T) {
|
|
ctx := context.Background()
|
|
reserved := NewReservedUsernameStore()
|
|
if _, err := reserved.ReserveUsername(ctx, "support", "official", "ops"); err != nil {
|
|
t.Fatalf("seed reserve: %v", err)
|
|
}
|
|
registry := NewCollectibleUsernameStore().WithReservedUsernames(reserved)
|
|
|
|
users := NewUserStore()
|
|
users.AttachUsernameRegistry(registry)
|
|
u, _ := users.Create(ctx, domain.User{AccessHash: 1, Phone: "15550001000", FirstName: "A"})
|
|
if ok, err := users.CheckUsername(ctx, u.ID, "support"); err != nil || ok {
|
|
t.Fatalf("CheckUsername(reserved) = %v, %v; want false, nil", ok, err)
|
|
}
|
|
if ok, err := users.CheckUsername(ctx, u.ID, "freename"); err != nil || !ok {
|
|
t.Fatalf("CheckUsername(free) = %v, %v; want true, nil", ok, err)
|
|
}
|
|
|
|
channels := NewChannelStore()
|
|
channels.AttachUsernameRegistry(registry)
|
|
created, err := channels.CreateChannel(ctx, domain.CreateChannelRequest{CreatorUserID: u.ID, Title: "C", Megagroup: true, Date: 1})
|
|
if err != nil {
|
|
t.Fatalf("create channel: %v", err)
|
|
}
|
|
if ok, err := channels.CheckUsername(ctx, u.ID, created.Channel.ID, "support"); err != nil || ok {
|
|
t.Fatalf("channel CheckUsername(reserved) = %v, %v; want false, nil", ok, err)
|
|
}
|
|
}
|