@@ -871,3 +871,67 @@ func TestGetRedirect(t *testing.T) {
871871 })
872872 }
873873}
874+
875+type ajaxRequestTest struct {
876+ opts *Options
877+ proxy *OAuthProxy
878+}
879+
880+func newAjaxRequestTest() *ajaxRequestTest {
881+ test := &ajaxRequestTest{}
882+ test.opts = NewOptions()
883+ test.opts.CookieSecret = "foobar"
884+ test.opts.ClientID = "bazquux"
885+ test.opts.ClientSecret = "xyzzyplugh"
886+ test.opts.Validate()
887+ test.proxy = NewOAuthProxy(test.opts, func(email string) bool {
888+ return true
889+ })
890+ return test
891+}
892+
893+func (test *ajaxRequestTest) getEndpoint(endpoint string, header http.Header) (int, http.Header, error) {
894+ rw := httptest.NewRecorder()
895+ req, err := http.NewRequest(http.MethodGet, endpoint, strings.NewReader(""))
896+ if err != nil {
897+ return 0, nil, err
898+ }
899+ req.Header = header
900+ test.proxy.ServeHTTP(rw, req)
901+ return rw.Code, rw.Header(), nil
902+}
903+
904+func testAjaxUnauthorizedRequest(t *testing.T, header http.Header) {
905+ test := newAjaxRequestTest()
906+ const endpoint = "/test"
907+
908+ code, rh, err := test.getEndpoint(endpoint, header)
909+ assert.NoError(t, err)
910+ assert.Equal(t, http.StatusUnauthorized, code)
911+ mime := rh.Get("Content-Type")
912+ assert.Equal(t, "application/json", mime)
913+}
914+func TestAjaxUnauthorizedRequest1(t *testing.T) {
915+ header := make(http.Header)
916+ header.Add("accept", "application/json")
917+
918+ testAjaxUnauthorizedRequest(t, header)
919+}
920+
921+func TestAjaxUnauthorizedRequest2(t *testing.T) {
922+ header := make(http.Header)
923+ header.Add("Accept", "application/json")
924+
925+ testAjaxUnauthorizedRequest(t, header)
926+}
927+
928+func TestAjaxForbiddendRequest(t *testing.T) {
929+ test := newAjaxRequestTest()
930+ const endpoint = "/test"
931+ header := make(http.Header)
932+ code, rh, err := test.getEndpoint(endpoint, header)
933+ assert.NoError(t, err)
934+ assert.Equal(t, http.StatusForbidden, code)
935+ mime := rh.Get("Content-Type")
936+ assert.NotEqual(t, "application/json", mime)
937+}