package mcpproxy

import (
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/require"
	"go.uber.org/zap"
	"go.uber.org/zap/zaptest/observer"
)

func TestPrivateRecoveryDoesNotLogRequestOrPanic(t *testing.T) {
	gin.SetMode(gin.TestMode)
	core, logs := observer.New(zap.ErrorLevel)
	router := gin.New()
	router.Use(privateRecovery(zap.New(core)))
	router.GET("/callback", func(c *gin.Context) { panic("panic-secret") })
	req := httptest.NewRequest(http.MethodGet, "/callback?code=code-secret&state=state-secret", nil)
	req.Header.Set("Cookie", "session=cookie-secret")
	req.Header.Set("Authorization", "Bearer bearer-secret")
	response := httptest.NewRecorder()
	router.ServeHTTP(response, req)
	require.Equal(t, http.StatusInternalServerError, response.Code)
	require.Len(t, logs.All(), 1)
	require.Equal(t, "request panicked", logs.All()[0].Message)
	require.Empty(t, logs.All()[0].Context)
}
