package auth

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

	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/desktop/internal/token"
)

func TestLogoutHandlerRevokesSessionAndNotifiesLifecycleOwner(t *testing.T) {
	gin.SetMode(gin.TestMode)
	router := gin.New()
	var invalidated string
	router.POST("/logout", LogoutHandler(func(sessionID string) {
		invalidated = sessionID
	}))

	sessionToken := token.CreateSession()
	req := httptest.NewRequest(http.MethodPost, "/logout", nil)
	req.Header.Set("Authorization", "Bearer "+sessionToken)
	recorder := httptest.NewRecorder()
	router.ServeHTTP(recorder, req)

	require.Equal(t, http.StatusOK, recorder.Code)
	require.False(t, token.ValidateSession(sessionToken))
	require.Equal(t, sessionToken, invalidated)
}
