Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package schema | |
import ( | |
"errors" | |
"testing" | |
"github.com/stretchr/testify/assert" | |
"github.com/weaviate/weaviate/entities/models" | |
) | |
func Test_Accessors(t *testing.T) { | |
car := &models.Class{ | |
Class: "Car", | |
Properties: []*models.Property{ | |
{Name: "modelName", DataType: DataTypeText.PropString(), Tokenization: models.PropertyTokenizationWhitespace}, | |
{Name: "manufacturerName", DataType: DataTypeText.PropString(), Tokenization: models.PropertyTokenizationWhitespace}, | |
{Name: "horsepower", DataType: []string{"int"}}, | |
}, | |
} | |
train := &models.Class{ | |
Class: "Train", | |
Properties: []*models.Property{ | |
{Name: "capacity", DataType: []string{"int"}}, | |
{Name: "trainCompany", DataType: DataTypeText.PropString(), Tokenization: models.PropertyTokenizationWhitespace}, | |
}, | |
} | |
action := &models.Class{ | |
Class: "SomeAction", | |
Properties: []*models.Property{}, | |
} | |
sch := Empty() | |
sch.Objects.Classes = []*models.Class{car, train, action} | |
t.Run("GetClass by kind and name", func(t *testing.T) { | |
class := sch.GetClass("Car") | |
assert.Equal(t, car, class) | |
class = sch.GetClass("Invalid") | |
assert.Equal(t, (*models.Class)(nil), class) | |
}) | |
t.Run("FindClass by name (without providing the kind)", func(t *testing.T) { | |
class := sch.FindClassByName("Car") | |
assert.Equal(t, car, class) | |
class = sch.FindClassByName("SomeAction") | |
assert.Equal(t, action, class) | |
class = sch.FindClassByName("Invalid") | |
assert.Equal(t, (*models.Class)(nil), class) | |
}) | |
t.Run("GetPropsOfType", func(t *testing.T) { | |
props := sch.GetPropsOfType(DataTypeText.String()) | |
expectedProps := []ClassAndProperty{ | |
{ | |
ClassName: "Car", | |
PropertyName: "modelName", | |
}, | |
{ | |
ClassName: "Car", | |
PropertyName: "manufacturerName", | |
}, | |
{ | |
ClassName: "Train", | |
PropertyName: "trainCompany", | |
}, | |
} | |
assert.ElementsMatch(t, expectedProps, props) | |
}) | |
t.Run("GetProperty by kind, classname, name", func(t *testing.T) { | |
prop, err := sch.GetProperty("Car", "modelName") | |
assert.Nil(t, err) | |
expectedProp := &models.Property{ | |
Name: "modelName", | |
DataType: DataTypeText.PropString(), | |
Tokenization: models.PropertyTokenizationWhitespace, | |
} | |
assert.Equal(t, expectedProp, prop) | |
}) | |
t.Run("GetProperty for invalid class", func(t *testing.T) { | |
_, err := sch.GetProperty("WrongClass", "modelName") | |
assert.Equal(t, errors.New("no such class with name 'WrongClass' found in the schema. Check your schema files for which classes are available"), err) | |
}) | |
t.Run("GetProperty for invalid prop", func(t *testing.T) { | |
_, err := sch.GetProperty("Car", "wrongProperty") | |
assert.Equal(t, errors.New("no such prop with name 'wrongProperty' found in class 'Car' in the schema. Check your schema files for which properties in this class are available"), err) | |
}) | |
} | |