usernames: report reserved names as taken in the check paths too
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.
This commit is contained in:
parent
66091ede72
commit
d1108c61f1
7 changed files with 79 additions and 5 deletions
37
internal/store/memory/reserved_username_test.go
Normal file
37
internal/store/memory/reserved_username_test.go
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue