KevinStephenson
Adding in weaviate code
b110593
raw
history blame
4.68 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package test
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/test/helper"
graphqlhelper "github.com/weaviate/weaviate/test/helper/graphql"
)
// run by setup_test.go
func gettingObjects(t *testing.T) {
t.Run("listing cities without references", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{
map[string]interface{}{"name": "Amsterdam"},
map[string]interface{}{"name": "Rotterdam"},
map[string]interface{}{"name": "Berlin"},
map[string]interface{}{"name": "Dusseldorf"},
map[string]interface{}{"name": "Missing Island"},
map[string]interface{}{"name": nil},
}
assert.ElementsMatch(t, expected, cities)
})
t.Run("listing cities with relations", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City { name, inCountry { ... on Country { name } } } } }")
cities := result.Get("Get", "City").AsSlice()
expected := parseJSONSlice(`[
{ "name": "Amsterdam", "inCountry": [{ "name": "Netherlands" }] },
{ "name": "Rotterdam", "inCountry": [{ "name": "Netherlands" }] },
{ "name": "Berlin", "inCountry": [{ "name": "Germany" }] },
{ "name": "Dusseldorf", "inCountry": [{ "name": "Germany" }] },
{ "name": "Missing Island", "inCountry": null },
{ "name": null, "inCountry": null }
]`)
assert.ElementsMatch(t, expected, cities)
})
t.Run("make sure raw response contains no error key", func(t *testing.T) {
// This test prevents a regression on gh-1535
query := []byte(`{"query":"{ Get { City { name } } }"}`)
res, err := http.Post(fmt.Sprintf("%s%s", helper.GetWeaviateURL(), "/v1/graphql"),
"application/json", bytes.NewReader(query))
require.Nil(t, err)
defer res.Body.Close()
var body map[string]interface{}
err = json.NewDecoder(res.Body).Decode(&body)
require.Nil(t, err)
_, ok := body["errors"]
assert.False(t, ok)
cities := body["data"].(map[string]interface{})["Get"].(map[string]interface{})["City"].([]interface{})
assert.Greater(t, len(cities), 0)
})
t.Run("listing cities with limit", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City(limit: 2) { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{
map[string]interface{}{"name": "Rotterdam"},
map[string]interface{}{"name": "Dusseldorf"},
}
assert.ElementsMatch(t, expected, cities)
})
t.Run("listing cities with offset and limit", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City(offset: 2 limit: 2) { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{
map[string]interface{}{"name": "Missing Island"},
map[string]interface{}{"name": nil},
}
assert.ElementsMatch(t, expected, cities)
})
t.Run("listing cities with offset", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City(offset: 2) { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{
map[string]interface{}{"name": "Missing Island"},
map[string]interface{}{"name": nil},
map[string]interface{}{"name": "Amsterdam"},
map[string]interface{}{"name": "Berlin"},
}
assert.ElementsMatch(t, expected, cities)
})
t.Run("listing cities with offset and limit beyond results size", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City(offset: 5 limit: 10) { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{
map[string]interface{}{"name": "Berlin"},
}
assert.ElementsMatch(t, expected, cities)
})
t.Run("listing cities with offset beyond results size", func(t *testing.T) {
result := graphqlhelper.AssertGraphQL(t, helper.RootAuth, "{ Get { City(offset: 6) { name } } }")
cities := result.Get("Get", "City").AsSlice()
expected := []interface{}{}
assert.ElementsMatch(t, expected, cities)
})
}