202 lines
5.3 KiB
Go
202 lines
5.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"veza-backend-api/internal/logging"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestFrontendLogHandler_ReceiveLog_Success(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
logger := zap.NewNop()
|
|
frontendLogger, _ := logging.NewLoggerWithFileRotation("./test_logs", "frontend", "test", "info")
|
|
handler := &FrontendLogHandler{
|
|
logger: logger,
|
|
frontendLogger: frontendLogger,
|
|
logDir: "./test_logs",
|
|
commonHandler: NewCommonHandler(logger),
|
|
}
|
|
|
|
router.POST("/api/v1/logs/frontend", handler.ReceiveLog)
|
|
|
|
reqBody := FrontendLogRequest{
|
|
Timestamp: "2024-01-01T00:00:00Z",
|
|
Level: "INFO",
|
|
Message: "Test log message",
|
|
Context: map[string]interface{}{"request_id": "test-123"},
|
|
}
|
|
|
|
body, _ := json.Marshal(reqBody)
|
|
|
|
// Execute
|
|
req, _ := http.NewRequest("POST", "/api/v1/logs/frontend", bytes.NewBuffer(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// Assert
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var response map[string]interface{}
|
|
err := json.Unmarshal(w.Body.Bytes(), &response)
|
|
assert.NoError(t, err)
|
|
assert.True(t, response["success"].(bool))
|
|
}
|
|
|
|
func TestFrontendLogHandler_ReceiveLog_InvalidJSON(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
logger := zap.NewNop()
|
|
frontendLogger, _ := logging.NewLoggerWithFileRotation("./test_logs", "frontend", "test", "info")
|
|
handler := &FrontendLogHandler{
|
|
logger: logger,
|
|
frontendLogger: frontendLogger,
|
|
logDir: "./test_logs",
|
|
commonHandler: NewCommonHandler(logger),
|
|
}
|
|
|
|
router.POST("/api/v1/logs/frontend", handler.ReceiveLog)
|
|
|
|
// Execute - Invalid JSON
|
|
req, _ := http.NewRequest("POST", "/api/v1/logs/frontend", bytes.NewBuffer([]byte("invalid json")))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// Assert
|
|
assert.Equal(t, http.StatusBadRequest, w.Code)
|
|
}
|
|
|
|
func TestFrontendLogHandler_ReceiveLog_DefaultLevel(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
logger := zap.NewNop()
|
|
frontendLogger, _ := logging.NewLoggerWithFileRotation("./test_logs", "frontend", "test", "info")
|
|
handler := &FrontendLogHandler{
|
|
logger: logger,
|
|
frontendLogger: frontendLogger,
|
|
logDir: "./test_logs",
|
|
commonHandler: NewCommonHandler(logger),
|
|
}
|
|
|
|
router.POST("/api/v1/logs/frontend", handler.ReceiveLog)
|
|
|
|
reqBody := FrontendLogRequest{
|
|
Timestamp: "2024-01-01T00:00:00Z",
|
|
Level: "", // Empty level should default to INFO
|
|
Message: "Test log message",
|
|
}
|
|
|
|
body, _ := json.Marshal(reqBody)
|
|
|
|
// Execute
|
|
req, _ := http.NewRequest("POST", "/api/v1/logs/frontend", bytes.NewBuffer(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// Assert
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var response map[string]interface{}
|
|
err := json.Unmarshal(w.Body.Bytes(), &response)
|
|
assert.NoError(t, err)
|
|
|
|
data := response["data"].(map[string]interface{})
|
|
assert.Equal(t, "INFO", data["level"])
|
|
}
|
|
|
|
func TestFrontendLogHandler_ReceiveLog_DifferentLevels(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
logger := zap.NewNop()
|
|
frontendLogger, _ := logging.NewLoggerWithFileRotation("./test_logs", "frontend", "test", "info")
|
|
handler := &FrontendLogHandler{
|
|
logger: logger,
|
|
frontendLogger: frontendLogger,
|
|
logDir: "./test_logs",
|
|
commonHandler: NewCommonHandler(logger),
|
|
}
|
|
|
|
router.POST("/api/v1/logs/frontend", handler.ReceiveLog)
|
|
|
|
levels := []string{"DEBUG", "INFO", "WARN", "ERROR", "UNKNOWN"}
|
|
|
|
for _, level := range levels {
|
|
reqBody := FrontendLogRequest{
|
|
Timestamp: "2024-01-01T00:00:00Z",
|
|
Level: level,
|
|
Message: "Test log message",
|
|
}
|
|
|
|
body, _ := json.Marshal(reqBody)
|
|
|
|
// Execute
|
|
req, _ := http.NewRequest("POST", "/api/v1/logs/frontend", bytes.NewBuffer(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// Assert
|
|
assert.Equal(t, http.StatusOK, w.Code, "Level: %s", level)
|
|
}
|
|
}
|
|
|
|
func TestFrontendLogHandler_ReceiveLog_WithContext(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
router := gin.New()
|
|
|
|
logger := zap.NewNop()
|
|
frontendLogger, _ := logging.NewLoggerWithFileRotation("./test_logs", "frontend", "test", "info")
|
|
handler := &FrontendLogHandler{
|
|
logger: logger,
|
|
frontendLogger: frontendLogger,
|
|
logDir: "./test_logs",
|
|
commonHandler: NewCommonHandler(logger),
|
|
}
|
|
|
|
router.POST("/api/v1/logs/frontend", handler.ReceiveLog)
|
|
|
|
reqBody := FrontendLogRequest{
|
|
Timestamp: "2024-01-01T00:00:00Z",
|
|
Level: "INFO",
|
|
Message: "Test log message",
|
|
Context: map[string]interface{}{
|
|
"request_id": "test-123",
|
|
"user_id": "user-456",
|
|
"action": "test_action",
|
|
},
|
|
Data: map[string]interface{}{
|
|
"key": "value",
|
|
},
|
|
}
|
|
|
|
body, _ := json.Marshal(reqBody)
|
|
|
|
// Execute
|
|
req, _ := http.NewRequest("POST", "/api/v1/logs/frontend", bytes.NewBuffer(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
w := httptest.NewRecorder()
|
|
router.ServeHTTP(w, req)
|
|
|
|
// Assert
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
}
|