github.com/weaviate/weaviate@v1.24.6/modules/ref2vec-centroid/config_test.go (about)

     1  //                           _       _
     2  // __      _____  __ ___   ___  __ _| |_ ___
     3  // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
     4  //  \ V  V /  __/ (_| |\ V /| | (_| | ||  __/
     5  //   \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
     6  //
     7  //  Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
     8  //
     9  //  CONTACT: hello@weaviate.io
    10  //
    11  
    12  package modcentroid
    13  
    14  import (
    15  	"context"
    16  	"fmt"
    17  	"testing"
    18  
    19  	"github.com/stretchr/testify/assert"
    20  	"github.com/weaviate/weaviate/entities/models"
    21  	"github.com/weaviate/weaviate/entities/moduletools"
    22  	"github.com/weaviate/weaviate/modules/ref2vec-centroid/config"
    23  )
    24  
    25  func TestConfigDefaults(t *testing.T) {
    26  	def := New().ClassConfigDefaults()
    27  	cfg := config.New(fakeClassConfig(def))
    28  
    29  	assert.Equal(t, config.MethodDefault, cfg.CalculationMethod())
    30  }
    31  
    32  func TestConfigValidator(t *testing.T) {
    33  	class := &models.Class{Class: "CentroidClass"}
    34  
    35  	tests := []struct {
    36  		name        string
    37  		class       *models.Class
    38  		classConfig moduletools.ClassConfig
    39  		expectedErr error
    40  	}{
    41  		{
    42  			name:  "valid config",
    43  			class: class,
    44  			classConfig: fakeClassConfig{
    45  				"referenceProperties": []interface{}{"someRef"},
    46  			},
    47  		},
    48  		{
    49  			name:        "invalid config - required fields omitted",
    50  			class:       class,
    51  			classConfig: fakeClassConfig{},
    52  			expectedErr: fmt.Errorf("validate %q: invalid config: must have at least "+
    53  				"one value in the \"referenceProperties\" field",
    54  				class.Class),
    55  		},
    56  		{
    57  			name:  "invalid config - wrong type for referenceProperties",
    58  			class: class,
    59  			classConfig: fakeClassConfig{
    60  				"referenceProperties": "someRef",
    61  			},
    62  			expectedErr: fmt.Errorf("validate %q: invalid config: expected array for "+
    63  				"field \"referenceProperties\", got string",
    64  				class.Class),
    65  		},
    66  		{
    67  			name:  "invalid config - empty referenceProperties slice",
    68  			class: class,
    69  			classConfig: fakeClassConfig{
    70  				"referenceProperties": []interface{}{},
    71  			},
    72  			expectedErr: fmt.Errorf("validate %q: invalid config: must have at least "+
    73  				"one value in the \"referenceProperties\" field",
    74  				class.Class),
    75  		},
    76  		{
    77  			name:  "invalid config - non-string value in referenceProperties array",
    78  			class: class,
    79  			classConfig: fakeClassConfig{
    80  				"referenceProperties": []interface{}{"someRef", 123},
    81  			},
    82  			expectedErr: fmt.Errorf("validate %q: invalid config: expected \"referenceProperties\" "+
    83  				"to contain strings, found int: [someRef 123]",
    84  				class.Class),
    85  		},
    86  	}
    87  
    88  	for _, test := range tests {
    89  		t.Run(test.name, func(t *testing.T) {
    90  			mod := New()
    91  			err := mod.ValidateClass(context.Background(), test.class, test.classConfig)
    92  			if test.expectedErr != nil {
    93  				assert.EqualError(t, err, test.expectedErr.Error())
    94  			} else {
    95  				assert.Nil(t, err)
    96  			}
    97  		})
    98  	}
    99  }