package auth

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

	jwtmiddleware "github.com/auth0/go-jwt-middleware"
)

func TestAuthMiddleware(t *testing.T) {
	newJwtMiddleware = func(auth0Domain, auth0Audience string) (*jwtmiddleware.JWTMiddleware, error) {
		return jwtmiddleware.New(), 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) {
			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)
			}
		})
	}

}
