Files
story/internal/identity/profile_test.go
T

61 lines
1.8 KiB
Go
Raw Normal View History

package identity
import (
"context"
"errors"
"github.com/jackc/pgx/v5/pgxpool"
"os"
"strings"
"testing"
)
func TestValidateDisplayName(t *testing.T) {
for _, name := range []string{"", " ", "名字\n另一行", strings.Repeat("名", 81), string([]byte{0xff})} {
if _, err := ValidateDisplayName(name); !errors.Is(err, ErrInvalidDisplayName) {
t.Errorf("accepted invalid nickname %q", name)
}
}
if name, err := ValidateDisplayName(" 家庭成员 "); err != nil || name != "家庭成员" {
t.Fatalf("normalization %q %v", name, err)
}
}
func TestDisplayNameOnlyChangesAuthenticatedIdentity(t *testing.T) {
url := os.Getenv("TEST_DATABASE_URL")
if url == "" {
t.Skip("TEST_DATABASE_URL is not set")
}
ctx := context.Background()
pool, err := pgxpool.New(ctx, url)
if err != nil {
t.Fatal(err)
}
defer pool.Close()
repo := NewRepository(pool)
owner := Principal{Issuer: localIssuer, Subject: ownerSubject}
outsider := Principal{Issuer: localIssuer, Subject: outsiderSubject}
before, err := repo.CurrentUser(ctx, owner)
if err != nil {
t.Fatal(err)
}
other, err := repo.CurrentUser(ctx, outsider)
if err != nil {
t.Fatal(err)
}
defer repo.UpdateDisplayName(ctx, owner, before.Accounts[0].DisplayName)
if err := repo.UpdateDisplayName(ctx, owner, "测试家人"); err != nil {
t.Fatal(err)
}
after, err := repo.CurrentUser(ctx, owner)
if err != nil || after.Accounts[0].DisplayName != "测试家人" {
t.Fatalf("nickname not saved: %v", err)
}
unchanged, err := repo.CurrentUser(ctx, outsider)
if err != nil || unchanged.Accounts[0].DisplayName != other.Accounts[0].DisplayName {
t.Fatal("another identity was modified")
}
if err := repo.UpdateDisplayName(ctx, Principal{}, "其他"); !errors.Is(err, ErrAccessDenied) {
t.Fatalf("empty principal accepted: %v", err)
}
}