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"
|
normalizedEmail = "user"
|
||||||
}
|
}
|
||||||
slug := "personal-" + strings.ReplaceAll(uuid.NewString(), "-", "")
|
slug := "personal-" + strings.ReplaceAll(uuid.NewString(), "-", "")
|
||||||
|
if len(slug) > 32 {
|
||||||
|
slug = slug[:32]
|
||||||
|
}
|
||||||
tenant, err := tenantService.RegisterTenant(
|
tenant, err := tenantService.RegisterTenant(
|
||||||
ctx,
|
ctx,
|
||||||
fmt.Sprintf("Personal - %s", normalizedEmail),
|
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