package apiinterceptor

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

	"github.com/tidbcloud/observability/pkg/common/awsauth"

	"github.com/stretchr/testify/assert"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/observability/pkg/common/constants"
)

func TestServiceAuthentication(t *testing.T) {

	t.Run("unauthorized", func(t *testing.T) {
		c, _ := gin.CreateTestContext(httptest.NewRecorder())
		c.Request, _ = http.NewRequest("POST", "/", nil)
		c.Request.Header.Add(constants.AuthorizationHeader, "bearer ssss")
		ServiceAuthentication(c)

		assert.Equal(t, http.StatusUnauthorized, c.Writer.Status())
	})
	t.Run("normal", func(t *testing.T) {
		stsToken := "bearer aaa"
		c, _ := gin.CreateTestContext(httptest.NewRecorder())
		c.Request, _ = http.NewRequest("POST", "/", nil)
		c.Request.Header.Add(constants.AuthorizationHeader, stsToken)

		awsauth.GetStsTokenCache().Set("aaa", time.Now().Add(constants.DefaultCacheTimeout).Unix(), constants.DefaultCacheTimeout)
		ServiceAuthentication(c)

		assert.Equal(t, http.StatusOK, c.Writer.Status())

	})
}
