KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.96 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package extensions
import (
"bytes"
"context"
"io"
"net/http"
"net/http/httptest"
"testing"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/entities/models"
)
func Test_UserFacingHandlers(t *testing.T) {
proxy := newFakeProxy()
h := NewRESTHandlers(nil, proxy)
t.Run("with a method other than POST", func(t *testing.T) {
r := httptest.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
h.UserFacingHandler().ServeHTTP(w, r)
res := w.Result()
defer res.Body.Close()
assert.Equal(t, http.StatusMethodNotAllowed, res.StatusCode)
})
t.Run("with the wrong media type", func(t *testing.T) {
r := httptest.NewRequest("POST", "/", nil)
r.Header.Add("content-type", "text/plain")
w := httptest.NewRecorder()
h.UserFacingHandler().ServeHTTP(w, r)
res := w.Result()
defer res.Body.Close()
assert.Equal(t, http.StatusUnsupportedMediaType, res.StatusCode)
})
t.Run("with the wrong body", func(t *testing.T) {
body := []byte(`{"concept":7}`)
r := httptest.NewRequest("POST", "/", bytes.NewReader(body))
r.Header.Add("content-type", "application/json")
w := httptest.NewRecorder()
h.UserFacingHandler().ServeHTTP(w, r)
res := w.Result()
defer res.Body.Close()
assert.Equal(t, http.StatusUnprocessableEntity, res.StatusCode)
})
t.Run("with the right body", func(t *testing.T) {
body := []byte(`{"concept":"foo","definition":"bar","weight":1}`)
r := httptest.NewRequest("POST", "/", bytes.NewReader(body))
r.Header.Add("content-type", "application/json")
w := httptest.NewRecorder()
h.UserFacingHandler().ServeHTTP(w, r)
res := w.Result()
defer res.Body.Close()
readBody, err := io.ReadAll(res.Body)
require.Nil(t, err)
assert.Equal(t, http.StatusOK, res.StatusCode)
assert.Equal(t, body, readBody)
})
t.Run("with a proxy error", func(t *testing.T) {
proxy.err = errors.Errorf("invalid input")
body := []byte(`{"concept":"foo","definition":"bar","weight":1}`)
r := httptest.NewRequest("POST", "/", bytes.NewReader(body))
r.Header.Add("content-type", "application/json")
w := httptest.NewRecorder()
h.UserFacingHandler().ServeHTTP(w, r)
res := w.Result()
defer res.Body.Close()
assert.Equal(t, http.StatusBadRequest, res.StatusCode)
})
}
type fakeProxy struct {
err error
}
func (f *fakeProxy) AddExtension(ctx context.Context,
ext *models.C11yExtension,
) error {
return f.err
}
func newFakeProxy() *fakeProxy {
return &fakeProxy{}
}