package auth

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

func TestAuthMiddleware(t *testing.T) {
	newJwtValidator = func(auth0Domain, auth0Audience string) (*JwtValidator, error) {
		return &JwtValidator{
			auth0Domain:   auth0Domain,
			auth0Audience: auth0Audience,
			jwks:          Jwks{}, // Empty JWKS for testing
		}, nil
	}

	for _, tc := range []struct {
		name     string
		secret   string
		wantCode int
	}{
		{
			name:     "dev",
			secret:   "secret",
			wantCode: http.StatusNotFound,
		},
		{
			name:     "unauthorized",
			secret:   "",
			wantCode: http.StatusUnauthorized,
		},
	} {
		t.Run(tc.name, func(t *testing.T) {
			tc := tc // fix variable into the local variable
			Auth0ClientSecret = &tc.secret
			handler := Middleware(http.NotFoundHandler())
			req := httptest.NewRequest("GET", "/", nil)
			recorder := httptest.NewRecorder()
			handler.ServeHTTP(recorder, req)

			if recorder.Code != tc.wantCode {
				t.Fatalf("cli.Get code got = %v, want = %v", recorder.Code, tc.wantCode)
			}
		})
	}

}
