fix: hide suspended account
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/joho/godotenv"
|
||||
@@ -204,3 +205,56 @@ func TestGift_DeleteRemovesItFromEveryGallery(t *testing.T) {
|
||||
t.Errorf("the seeded reward was removed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// A suspended account must not be discoverable. One query backs the people
|
||||
// search page, the mention autocomplete and the chat member pickers, so a leak
|
||||
// here surfaces in all three.
|
||||
func TestBannedUsers_AreNotDiscoverable(t *testing.T) {
|
||||
_, pg := testRewardRepo(t)
|
||||
ctx := context.Background()
|
||||
users := repository.NewUserRepo(pg)
|
||||
|
||||
// A distinctive name so the search can't match anyone else.
|
||||
marker := "Zzbanprobe" + uuid.NewString()[:6]
|
||||
active := giftUser(t, pg)
|
||||
banned := giftUser(t, pg)
|
||||
for id, name := range map[string]string{active: marker + " Active", banned: marker + " Banned"} {
|
||||
if _, err := pg.Pool.Exec(ctx, `UPDATE users SET name = $2 WHERE id = $1`, id, name); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if _, err := pg.Pool.Exec(ctx,
|
||||
`UPDATE users SET banned_at = now() WHERE id = $1`, banned); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
found, total, err := users.Search(ctx, marker, 20, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ids := map[string]bool{}
|
||||
for _, u := range found {
|
||||
ids[u.ID] = true
|
||||
}
|
||||
if !ids[active] {
|
||||
t.Error("the active account is missing from search")
|
||||
}
|
||||
if ids[banned] {
|
||||
t.Error("a suspended account is searchable — it can be @mentioned or added to a group")
|
||||
}
|
||||
// The count backs pagination, so it has to agree with the page.
|
||||
if total != len(found) {
|
||||
t.Errorf("total = %d but page returned %d — count and page WHERE disagree", total, len(found))
|
||||
}
|
||||
|
||||
// And the welcome strip, which is the most prominent placement there is.
|
||||
recent, err := users.RecentlyJoined(ctx, active, time.Now().Add(-24*time.Hour), 20)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, u := range recent {
|
||||
if u.ID == banned {
|
||||
t.Error("a suspended account appears in the new-users strip")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user