forked from baron/baron-sso
backend: 개인 테넌트 자동 생성 시 슬러그 길이 초과로 인한 가입 503 오류 원천 해결 코드 반영 (#1183)
This commit is contained in:
@@ -135,6 +135,9 @@ func createPersonalTenantForUser(ctx context.Context, tenantService service.Tena
|
||||
normalizedEmail = "user"
|
||||
}
|
||||
slug := "personal-" + strings.ReplaceAll(uuid.NewString(), "-", "")
|
||||
if len(slug) > 32 {
|
||||
slug = slug[:32]
|
||||
}
|
||||
tenant, err := tenantService.RegisterTenant(
|
||||
ctx,
|
||||
fmt.Sprintf("Personal - %s", normalizedEmail),
|
||||
|
||||
49
backend/internal/handler/tenant_assignment_policy_test.go
Normal file
49
backend/internal/handler/tenant_assignment_policy_test.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"baron-sso-backend/internal/domain"
|
||||
"baron-sso-backend/internal/utils"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
func TestCreatePersonalTenantForUser_SlugLength(t *testing.T) {
|
||||
mockTenantService := &MockTenantService{}
|
||||
ctx := context.Background()
|
||||
|
||||
var capturedSlug string
|
||||
mockTenantService.On(
|
||||
"RegisterTenant",
|
||||
ctx,
|
||||
"Personal - user@example.com",
|
||||
mock.AnythingOfType("string"),
|
||||
domain.TenantTypePersonal,
|
||||
"Automatically provisioned personal tenant",
|
||||
[]string(nil),
|
||||
(*string)(nil),
|
||||
"",
|
||||
).Run(func(args mock.Arguments) {
|
||||
capturedSlug = args.String(2)
|
||||
}).Return(&domain.Tenant{
|
||||
ID: "personal-tenant-id",
|
||||
Slug: "personal-slug",
|
||||
Name: "Personal - user@example.com",
|
||||
}, nil)
|
||||
|
||||
tenant, err := createPersonalTenantForUser(ctx, mockTenantService, "user@example.com")
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, tenant)
|
||||
|
||||
// Ensure the generated slug is strictly 32 characters or less
|
||||
assert.LessOrEqual(t, len(capturedSlug), 32)
|
||||
assert.True(t, strings.HasPrefix(capturedSlug, "personal-"))
|
||||
|
||||
// Ensure that the captured slug actually passes ValidateSlug!
|
||||
valid, msg := utils.ValidateSlug(capturedSlug)
|
||||
assert.True(t, valid, "Slug must be valid: "+msg)
|
||||
}
|
||||
Reference in New Issue
Block a user