KevinStephenson
Adding in weaviate code
b110593
raw
history blame
4.94 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package test
import (
"context"
"fmt"
"testing"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/client/objects"
clschema "github.com/weaviate/weaviate/client/schema"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/schema"
"github.com/weaviate/weaviate/test/docker"
"github.com/weaviate/weaviate/test/helper"
)
// Tests that sort parameters are validated with the correct class
func TestSort(t *testing.T) {
createObjectClass(t, &models.Class{
Class: "ClassToSort",
Properties: []*models.Property{
{
Name: "name",
DataType: schema.DataTypeText.PropString(),
Tokenization: models.PropertyTokenizationWhitespace,
},
},
})
defer deleteObjectClass(t, "ClassToSort")
createObjectClass(t, &models.Class{
Class: "OtherClass",
Properties: []*models.Property{
{
Name: "ref",
DataType: []string{"ClassToSort"},
},
},
})
defer deleteObjectClass(t, "OtherClass")
listParams := objects.NewObjectsListParams()
nameClass := "ClassToSort"
nameProp := "name"
limit := int64(5)
listParams.Class = &nameClass
listParams.Sort = &nameProp
listParams.Limit = &limit
_, err := helper.Client(t).Objects.ObjectsList(listParams, nil)
require.Nil(t, err, "should not error")
}
func TestObjects_AsyncIndexing(t *testing.T) {
ctx := context.Background()
compose, err := docker.New().
WithWeaviate().
WithText2VecContextionary().
WithWeaviateEnv("ASYNC_INDEXING", "true").
Start(ctx)
require.NoError(t, err)
defer func() {
require.NoError(t, compose.Terminate(ctx))
}()
defer helper.SetupClient(fmt.Sprintf("%s:%s", helper.ServerHost, helper.ServerPort))
helper.SetupClient(compose.GetWeaviate().URI())
testObjects(t)
}
func TestObjects_SyncIndexing(t *testing.T) {
testObjects(t)
}
func testObjects(t *testing.T) {
createObjectClass(t, &models.Class{
Class: "TestObject",
ModuleConfig: map[string]interface{}{
"text2vec-contextionary": map[string]interface{}{
"vectorizeClassName": true,
},
},
Properties: []*models.Property{
{
Name: "testString",
DataType: schema.DataTypeText.PropString(),
Tokenization: models.PropertyTokenizationWhitespace,
},
{
Name: "testWholeNumber",
DataType: []string{"int"},
},
{
Name: "testNumber",
DataType: []string{"number"},
},
{
Name: "testDateTime",
DataType: []string{"date"},
},
{
Name: "testTrueFalse",
DataType: []string{"boolean"},
},
{
Name: "testPhoneNumber",
DataType: []string{"phoneNumber"},
},
},
})
createObjectClass(t, &models.Class{
Class: "TestObjectCustomVector",
Vectorizer: "none",
Properties: []*models.Property{
{
Name: "description",
DataType: []string{"text"},
},
},
})
createObjectClass(t, &models.Class{
Class: "TestDeleteClassOne",
Vectorizer: "none",
Properties: []*models.Property{
{
Name: "text",
DataType: []string{"text"},
},
},
})
createObjectClass(t, &models.Class{
Class: "TestDeleteClassTwo",
Vectorizer: "none",
Properties: []*models.Property{
{
Name: "text",
DataType: []string{"text"},
},
},
})
// tests
t.Run("listing objects", listingObjects)
t.Run("searching for neighbors", searchNeighbors)
t.Run("running a feature projection", featureProjection)
t.Run("creating objects", creatingObjects)
t.Run("custom vector journey", customVectors)
t.Run("auto schema", autoSchemaObjects)
t.Run("checking object's existence", checkObjects)
t.Run("delete request deletes all objects with a given ID", deleteAllObjectsFromAllClasses)
// tear down
deleteObjectClass(t, "TestObject")
deleteObjectClass(t, "TestObjectCustomVector")
deleteObjectClass(t, "NonExistingClass")
deleteObjectClass(t, "TestDeleteClassOne")
deleteObjectClass(t, "TestDeleteClassTwo")
}
func createObjectClass(t *testing.T, class *models.Class) {
params := clschema.NewSchemaObjectsCreateParams().WithObjectClass(class)
resp, err := helper.Client(t).Schema.SchemaObjectsCreate(params, nil)
helper.AssertRequestOk(t, resp, err, nil)
}
func deleteObjectClass(t *testing.T, class string) {
delParams := clschema.NewSchemaObjectsDeleteParams().WithClassName(class)
delRes, err := helper.Client(t).Schema.SchemaObjectsDelete(delParams, nil)
helper.AssertRequestOk(t, delRes, err, nil)
}