Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package concepts | |
import ( | |
"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 TestHandlers(t *testing.T) { | |
insp := newFakeInspector() | |
h := NewRESTHandlers(insp) | |
t.Run("without a concept", func(t *testing.T) { | |
insp.reset() | |
r := httptest.NewRequest("GET", "/", nil) | |
w := httptest.NewRecorder() | |
h.Handler().ServeHTTP(w, r) | |
res := w.Result() | |
defer res.Body.Close() | |
assert.Equal(t, http.StatusNotFound, res.StatusCode) | |
}) | |
t.Run("without any errors", func(t *testing.T) { | |
insp.reset() | |
r := httptest.NewRequest("GET", "/my-concept", nil) | |
w := httptest.NewRecorder() | |
h.Handler().ServeHTTP(w, r) | |
res := w.Result() | |
defer res.Body.Close() | |
json, err := io.ReadAll(res.Body) | |
require.Nil(t, err) | |
expected := `{"individualWords":[{` + | |
`"info":{"vector":[0.1,0.2]},"present":true,"word":"my-concept"}]}` | |
assert.Equal(t, http.StatusOK, res.StatusCode) | |
assert.Equal(t, expected, string(json)) | |
}) | |
t.Run("without an error from the UC", func(t *testing.T) { | |
insp.reset() | |
insp.err = errors.Errorf("invalid input") | |
r := httptest.NewRequest("GET", "/my-concept", nil) | |
w := httptest.NewRecorder() | |
h.Handler().ServeHTTP(w, r) | |
res := w.Result() | |
defer res.Body.Close() | |
json, err := io.ReadAll(res.Body) | |
require.Nil(t, err) | |
expected := `{"error":[{"message":"invalid input"}]}` | |
assert.Equal(t, http.StatusBadRequest, res.StatusCode) | |
assert.Equal(t, expected, string(json)) | |
}) | |
} | |
type fakeInspector struct { | |
err error | |
} | |
func (f *fakeInspector) reset() { | |
f.err = nil | |
} | |
func (f *fakeInspector) GetWords(ctx context.Context, | |
concept string, | |
) (*models.C11yWordsResponse, error) { | |
return &models.C11yWordsResponse{ | |
IndividualWords: []*models.C11yWordsResponseIndividualWordsItems0{ | |
{ | |
Present: true, | |
Word: concept, | |
Info: &models.C11yWordsResponseIndividualWordsItems0Info{ | |
Vector: []float32{0.1, 0.2}, | |
}, | |
}, | |
}, | |
}, f.err | |
} | |
func newFakeInspector() *fakeInspector { | |
return &fakeInspector{} | |
} | |