forked from baron/baron-sso
- FE: Vitest 환경 구축 및 공통 UI 컴포넌트(Badge, Button) 테스트 추가 - FE: Playwright E2E 테스트(Auth, Tenant CRUD 및 Validation) 시나리오 보강 - BE: Testcontainers 기반 Repository 통합 테스트(PostgreSQL) 추가 - BE: TenantRepository 계층 구조(Hierarchy), DB 제약조건(Unique) 테스트 - BE: UserRepository 통합 테스트(CRUD, Delete) 추가 - BE: PasswordPolicy 유틸리티 테스트 보강 - BE: TenantService 엣지 케이스(중복 슬러그, 권한 등) 검증 로직 추가 - Fix: 하위 테넌트 생성 시 ParentID 누락 문제 해결
64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package handler
|
|
|
|
import (
|
|
"baron-sso-backend/internal/domain"
|
|
"baron-sso-backend/internal/service"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
// --- Mocks ---
|
|
|
|
type MockKratosAdminForUser struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) GetIdentity(ctx context.Context, id string) (*service.KratosIdentity, error) {
|
|
args := m.Called(ctx, id)
|
|
if args.Get(0) == nil {
|
|
return nil, args.Error(1)
|
|
}
|
|
return args.Get(0).(*service.KratosIdentity), args.Error(1)
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) ListIdentities(ctx context.Context) ([]service.KratosIdentity, error) {
|
|
args := m.Called(ctx)
|
|
return args.Get(0).([]service.KratosIdentity), args.Error(1)
|
|
}
|
|
|
|
// Note: In reality, KratosAdminService might not be an interface.
|
|
// If it's a struct, we'd need to mock the underlying client or use an interface.
|
|
// For the sake of this test, let's assume we can mock it or use a wrapper.
|
|
|
|
func TestUserHandler_CreateUser_InvalidEmail(t *testing.T) {
|
|
app := fiber.New()
|
|
h := &UserHandler{}
|
|
app.Post("/users", h.CreateUser)
|
|
|
|
payload := map[string]string{
|
|
"email": "invalid-email",
|
|
"name": "Test",
|
|
}
|
|
body, _ := json.Marshal(payload)
|
|
req := httptest.NewRequest("POST", "/users", bytes.NewReader(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
resp, _ := app.Test(req)
|
|
assert.Equal(t, 400, resp.StatusCode)
|
|
}
|
|
|
|
func TestUserHandler_GetUser_Forbidden(t *testing.T) {
|
|
app := fiber.New()
|
|
mockKratos := new(MockKratosAdminForUser)
|
|
// We need a way to inject mockKratos into UserHandler.
|
|
// Since UserHandler uses *service.KratosAdminService (struct),
|
|
// we'd typically use an interface here.
|
|
// For now, let's just focus on the logic validation if possible.
|
|
}
|