SemanticSearchPOC / usecases /objects /batch_delete_test.go
KevinStephenson
Adding in weaviate code
b110593
raw
history blame
5.05 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package objects
import (
"context"
"testing"
"github.com/sirupsen/logrus/hooks/test"
"github.com/stretchr/testify/assert"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/schema"
"github.com/weaviate/weaviate/entities/vectorindex/hnsw"
"github.com/weaviate/weaviate/entities/verbosity"
"github.com/weaviate/weaviate/usecases/config"
)
func Test_BatchDelete_RequestValidation(t *testing.T) {
var (
vectorRepo *fakeVectorRepo
manager *BatchManager
)
schema := schema.Schema{
Objects: &models.Schema{
Classes: []*models.Class{
{
Class: "Foo",
Properties: []*models.Property{
{
Name: "name",
DataType: schema.DataTypeText.PropString(),
Tokenization: models.PropertyTokenizationWhitespace,
},
},
VectorIndexConfig: hnsw.UserConfig{},
Vectorizer: config.VectorizerModuleNone,
},
},
},
}
resetAutoSchema := func(autoSchema bool) {
vectorRepo = &fakeVectorRepo{}
config := &config.WeaviateConfig{
Config: config.Config{
AutoSchema: config.AutoSchema{
Enabled: autoSchema,
},
},
}
locks := &fakeLocks{}
schemaManager := &fakeSchemaManager{
GetSchemaResponse: schema,
}
logger, _ := test.NewNullLogger()
authorizer := &fakeAuthorizer{}
modulesProvider := getFakeModulesProvider()
manager = NewBatchManager(vectorRepo, modulesProvider, locks,
schemaManager, config, logger, authorizer, nil)
}
reset := func() {
resetAutoSchema(false)
}
ctx := context.Background()
reset()
t.Run("with invalid input", func(t *testing.T) {
tests := []struct {
input *models.BatchDelete
expectedError string
}{
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
Match: &models.BatchDeleteMatch{
Class: "SomeClass",
Where: &models.WhereFilter{
Path: []string{"some", "path"},
Operator: "Equal",
ValueText: ptString("value"),
},
},
},
expectedError: "validate: class: SomeClass doesn't exist",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
Match: &models.BatchDeleteMatch{
Class: "Foo",
Where: &models.WhereFilter{
Path: []string{"some"},
Operator: "Equal",
ValueText: ptString("value"),
},
},
},
expectedError: "validate: invalid where filter: no such prop with name 'some' found in class 'Foo' " +
"in the schema. Check your schema files for which properties in this class are available",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
},
expectedError: "validate: empty match clause",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
Match: &models.BatchDeleteMatch{
Class: "",
},
},
expectedError: "validate: empty match.class clause",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
Match: &models.BatchDeleteMatch{
Class: "Foo",
},
},
expectedError: "validate: empty match.where clause",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString(verbosity.OutputVerbose),
Match: &models.BatchDeleteMatch{
Class: "Foo",
Where: &models.WhereFilter{
Path: []string{},
Operator: "Equal",
ValueText: ptString("name"),
},
},
},
expectedError: "validate: failed to parse where filter: invalid where filter: field 'path': must have at least one element",
},
{
input: &models.BatchDelete{
DryRun: ptBool(false),
Output: ptString("Simplified Chinese"),
Match: &models.BatchDeleteMatch{
Class: "Foo",
Where: &models.WhereFilter{
Path: []string{"name"},
Operator: "Equal",
ValueText: ptString("value"),
},
},
},
expectedError: "validate: invalid output: \"Simplified Chinese\", possible values are: \"minimal\", \"verbose\"",
},
}
for _, test := range tests {
_, err := manager.DeleteObjects(ctx, nil, test.input.Match, test.input.DryRun, test.input.Output, nil, "")
assert.Equal(t, test.expectedError, err.Error())
}
})
}
func ptBool(b bool) *bool {
return &b
}
func ptString(s string) *string {
return &s
}