forked from baron/baron-sso
Includes Worksmobile SSOT sync comparison updates, UUID import conflict resolution, and Playwright route mock stabilization.
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package handler
|
|
|
|
import (
|
|
"baron-sso-backend/internal/domain"
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
func TestUserHandler_BulkCreateUsers_UUIDImportPolicy(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
field string
|
|
}{
|
|
{name: "id 필드 차단", field: "id"},
|
|
{name: "uuid 필드 차단", field: "uuid"},
|
|
{name: "userId 필드 차단", field: "userId"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
app := fiber.New()
|
|
mockKratos := new(MockKratosAdmin)
|
|
mockOry := new(MockOryProvider)
|
|
|
|
h := &UserHandler{
|
|
KratosAdmin: mockKratos,
|
|
OryProvider: mockOry,
|
|
}
|
|
app.Post("/users/bulk", h.BulkCreateUsers)
|
|
|
|
mockOry.On("GetPasswordPolicy").Return(&domain.PasswordPolicy{MinLength: 8}, nil).Once()
|
|
|
|
payload := map[string]any{
|
|
"users": []map[string]any{
|
|
{
|
|
"email": "uuid-import@test.com",
|
|
"name": "UUID Import User",
|
|
tt.field: "550e8400-e29b-41d4-a716-446655440000",
|
|
"metadata": map[string]any{},
|
|
},
|
|
},
|
|
}
|
|
body, _ := json.Marshal(payload)
|
|
req := httptest.NewRequest("POST", "/users/bulk", bytes.NewReader(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, _ := app.Test(req)
|
|
assert.Equal(t, 200, resp.StatusCode)
|
|
|
|
var result struct {
|
|
Results []bulkUserResult `json:"results"`
|
|
}
|
|
assert.NoError(t, json.NewDecoder(resp.Body).Decode(&result))
|
|
assert.Len(t, result.Results, 1)
|
|
assert.False(t, result.Results[0].Success)
|
|
assert.Contains(t, result.Results[0].Message, "사용자 UUID 가져오기는 지원하지 않습니다")
|
|
|
|
mockOry.AssertExpectations(t)
|
|
mockKratos.AssertNotCalled(t, "FindIdentityIDByIdentifier", mock.Anything, mock.Anything)
|
|
})
|
|
}
|
|
}
|