1
0
forked from baron/baron-sso
Files
baron-sso/backend/internal/handler/user_handler_test.go
2026-02-23 12:54:21 +09:00

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.
}