package middleware

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

	"github.com/gin-gonic/gin"
)

func TestInternalTokenAuth(t *testing.T) {
	gin.SetMode(gin.TestMode)
	cases := []struct {
		name       string
		authHeader string
		wantStatus int
	}{
		{"missing header", "", http.StatusUnauthorized},
		{"wrong scheme", "Basic xyz", http.StatusUnauthorized},
		{"wrong token", "Bearer bad", http.StatusUnauthorized},
		{"correct token", "Bearer right-token", http.StatusOK},
	}
	for _, tc := range cases {
		t.Run(tc.name, func(t *testing.T) {
			r := gin.New()
			r.Use(InternalTokenAuth("right-token"))
			r.GET("/internal/x", func(c *gin.Context) { c.String(http.StatusOK, "ok") })
			req := httptest.NewRequest(http.MethodGet, "/internal/x", nil)
			if tc.authHeader != "" {
				req.Header.Set("Authorization", tc.authHeader)
			}
			rec := httptest.NewRecorder()
			r.ServeHTTP(rec, req)
			if rec.Code != tc.wantStatus {
				t.Errorf("status = %d, want %d", rec.Code, tc.wantStatus)
			}
		})
	}
}
