forked from baron/baron-sso
80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"baron-sso-backend/internal/service"
|
|
"bytes"
|
|
"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)
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) FindIdentityIDByIdentifier(ctx context.Context, identifier string) (string, error) {
|
|
return "", nil
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) UpdateIdentity(ctx context.Context, identityID string, traits map[string]interface{}, state string) (*service.KratosIdentity, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) UpdateIdentityPassword(ctx context.Context, identityID, newPassword string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *MockKratosAdminForUser) DeleteIdentity(ctx context.Context, identityID string) error {
|
|
return nil
|
|
}
|
|
|
|
func TestUserHandler_CreateUser_InvalidEmail(t *testing.T) {
|
|
app := fiber.New()
|
|
mockKratos := new(MockKratosAdminForUser)
|
|
h := &UserHandler{
|
|
KratosAdmin: mockKratos,
|
|
OryProvider: &service.OryProvider{}, // Assuming it's a struct and non-nil is enough for this check
|
|
}
|
|
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.
|
|
}
|