github.com/weaviate/weaviate@v1.24.6/usecases/modulecomponents/arguments/nearText/graphql_argument_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 nearText
    13  
    14  import (
    15  	"testing"
    16  
    17  	"github.com/stretchr/testify/assert"
    18  	"github.com/tailor-inc/graphql"
    19  )
    20  
    21  func TestNearTextGraphQLArgument(t *testing.T) {
    22  	t.Run("should generate nearText argument properly", func(t *testing.T) {
    23  		// given
    24  		prefix := "Prefix"
    25  		classname := "Class"
    26  		// when
    27  		nearText := New(nil).nearTextArgument(prefix, classname)
    28  
    29  		// then
    30  		// the built graphQL field needs to support this structure:
    31  		// {
    32  		//   concepts: ["c1", "c2"],
    33  		//   distance: 0.9,
    34  		//   moveTo: {
    35  		//          concepts: ["c1", "c2"],
    36  		//          objects: [
    37  		//               { id: "some-uuid-value"}],
    38  		//               { beacon: "some-beacon-value"}
    39  		//          ],
    40  		//          force: 0.8
    41  		//   }
    42  		//   moveAwayFrom: {
    43  		//          concepts: ["c1", "c2"],
    44  		//          objects: [
    45  		//               { id: "some-uuid-value"}],
    46  		//               { beacon: "some-beacon-value"}
    47  		//          ],
    48  		//          force: 0.8
    49  		//   },
    50  		//   targetVectors: ["targetVector"]
    51  		// }
    52  		assert.NotNil(t, nearText)
    53  		assert.Equal(t, "PrefixClassNearTextInpObj", nearText.Type.Name())
    54  		nearTextFields, ok := nearText.Type.(*graphql.InputObject)
    55  		assert.True(t, ok)
    56  		assert.NotNil(t, nearTextFields)
    57  		assert.Equal(t, 6, len(nearTextFields.Fields()))
    58  		fields := nearTextFields.Fields()
    59  		concepts := fields["concepts"]
    60  		conceptsNonNull, conceptsNonNullOK := concepts.Type.(*graphql.NonNull)
    61  		assert.True(t, conceptsNonNullOK)
    62  		conceptsNonNullList, conceptsNonNullListOK := conceptsNonNull.OfType.(*graphql.List)
    63  		assert.True(t, conceptsNonNullListOK)
    64  		assert.Equal(t, "String", conceptsNonNullList.OfType.Name())
    65  		assert.NotNil(t, concepts)
    66  		conceptsType, conceptsTypeOK := concepts.Type.(*graphql.NonNull)
    67  		assert.True(t, conceptsTypeOK)
    68  		assert.NotNil(t, conceptsType)
    69  		assert.NotNil(t, fields["certainty"])
    70  		assert.NotNil(t, fields["distance"])
    71  		assert.NotNil(t, fields["moveTo"])
    72  		moveTo, moveToOK := fields["moveTo"].Type.(*graphql.InputObject)
    73  		assert.True(t, moveToOK)
    74  		assert.Equal(t, 3, len(moveTo.Fields()))
    75  		assert.NotNil(t, moveTo.Fields()["concepts"])
    76  		moveToConcepts, moveToConceptsOK := moveTo.Fields()["concepts"].Type.(*graphql.List)
    77  		assert.True(t, moveToConceptsOK)
    78  		assert.Equal(t, "String", moveToConcepts.OfType.Name())
    79  		assert.NotNil(t, moveToConcepts)
    80  		assert.NotNil(t, moveTo.Fields()["objects"])
    81  		moveToObjects, moveToObjectsOK := moveTo.Fields()["objects"].Type.(*graphql.List)
    82  		assert.True(t, moveToObjectsOK)
    83  		moveToObjectsObjects, moveToObjectsObjectsOK := moveToObjects.OfType.(*graphql.InputObject)
    84  		assert.True(t, moveToObjectsObjectsOK)
    85  		assert.Equal(t, 2, len(moveToObjectsObjects.Fields()))
    86  		assert.NotNil(t, moveToObjectsObjects.Fields()["id"])
    87  		assert.NotNil(t, moveToObjectsObjects.Fields()["beacon"])
    88  		assert.NotNil(t, moveTo.Fields()["force"])
    89  		_, moveToForceOK := moveTo.Fields()["force"].Type.(*graphql.NonNull)
    90  		assert.True(t, moveToForceOK)
    91  		assert.NotNil(t, fields["moveAwayFrom"])
    92  		moveAwayFrom, moveAwayFromOK := fields["moveAwayFrom"].Type.(*graphql.InputObject)
    93  		assert.True(t, moveAwayFromOK)
    94  		assert.NotNil(t, moveAwayFrom.Fields()["concepts"])
    95  		assert.NotNil(t, moveAwayFrom.Fields()["objects"])
    96  		moveAwayFromObjects, moveAwayFromObjectsOK := moveAwayFrom.Fields()["objects"].Type.(*graphql.List)
    97  		assert.True(t, moveAwayFromObjectsOK)
    98  		moveAwayFromObjectsObjects, moveAwayFromObjectsObjectsOK := moveAwayFromObjects.OfType.(*graphql.InputObject)
    99  		assert.Equal(t, 2, len(moveAwayFromObjectsObjects.Fields()))
   100  		assert.True(t, moveAwayFromObjectsObjectsOK)
   101  		assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["id"])
   102  		assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["beacon"])
   103  		assert.NotNil(t, moveAwayFrom.Fields()["force"])
   104  		_, moveAwayFromForceOK := moveAwayFrom.Fields()["force"].Type.(*graphql.NonNull)
   105  		assert.True(t, moveAwayFromForceOK)
   106  		targetVectors := fields["targetVectors"]
   107  		targetVectorsList, targetVectorsListOK := targetVectors.Type.(*graphql.List)
   108  		assert.True(t, targetVectorsListOK)
   109  		assert.Equal(t, "String", targetVectorsList.OfType.Name())
   110  		assert.NotNil(t, targetVectors)
   111  	})
   112  }
   113  
   114  func TestNearTextGraphQLArgumentWithAutocorrect(t *testing.T) {
   115  	t.Run("should generate nearText argument with autocorrect properly", func(t *testing.T) {
   116  		// given
   117  		prefix := "Prefix"
   118  		classname := "Class"
   119  		// when
   120  		nearText := New(&fakeTransformer{}).nearTextArgument(prefix, classname)
   121  
   122  		// then
   123  		// the built graphQL field needs to support this structure:
   124  		// {
   125  		//   concepts: ["c1", "c2"],
   126  		//   certainty: 0.9,
   127  		//   autocorrect: true,
   128  		//   moveTo: {
   129  		//          concepts: ["c1", "c2"],
   130  		//          objects: [
   131  		//               { id: "some-uuid-value"}],
   132  		//               { beacon: "some-beacon-value"}
   133  		//          ],
   134  		//          force: 0.8
   135  		//   }
   136  		//   moveAwayFrom: {
   137  		//          concepts: ["c1", "c2"],
   138  		//          objects: [
   139  		//               { id: "some-uuid-value"}],
   140  		//               { beacon: "some-beacon-value"}
   141  		//          ],
   142  		//          force: 0.8
   143  		//   },
   144  		//   targetVectors: ["targetVector"],
   145  		// }
   146  		assert.NotNil(t, nearText)
   147  		assert.Equal(t, "PrefixClassNearTextInpObj", nearText.Type.Name())
   148  		nearTextFields, ok := nearText.Type.(*graphql.InputObject)
   149  		assert.True(t, ok)
   150  		assert.NotNil(t, nearTextFields)
   151  		assert.Equal(t, 7, len(nearTextFields.Fields()))
   152  		fields := nearTextFields.Fields()
   153  		concepts := fields["concepts"]
   154  		conceptsNonNull, conceptsNonNullOK := concepts.Type.(*graphql.NonNull)
   155  		assert.True(t, conceptsNonNullOK)
   156  		conceptsNonNullList, conceptsNonNullListOK := conceptsNonNull.OfType.(*graphql.List)
   157  		assert.True(t, conceptsNonNullListOK)
   158  		assert.Equal(t, "String", conceptsNonNullList.OfType.Name())
   159  		assert.NotNil(t, concepts)
   160  		conceptsType, conceptsTypeOK := concepts.Type.(*graphql.NonNull)
   161  		assert.True(t, conceptsTypeOK)
   162  		assert.NotNil(t, conceptsType)
   163  		assert.NotNil(t, fields["certainty"])
   164  		assert.NotNil(t, fields["distance"])
   165  		assert.NotNil(t, fields["autocorrect"])
   166  		assert.NotNil(t, fields["moveTo"])
   167  		moveTo, moveToOK := fields["moveTo"].Type.(*graphql.InputObject)
   168  		assert.True(t, moveToOK)
   169  		assert.Equal(t, 3, len(moveTo.Fields()))
   170  		assert.NotNil(t, moveTo.Fields()["concepts"])
   171  		moveToConcepts, moveToConceptsOK := moveTo.Fields()["concepts"].Type.(*graphql.List)
   172  		assert.True(t, moveToConceptsOK)
   173  		assert.Equal(t, "String", moveToConcepts.OfType.Name())
   174  		assert.NotNil(t, moveToConcepts)
   175  		assert.NotNil(t, moveTo.Fields()["objects"])
   176  		moveToObjects, moveToObjectsOK := moveTo.Fields()["objects"].Type.(*graphql.List)
   177  		assert.True(t, moveToObjectsOK)
   178  		moveToObjectsObjects, moveToObjectsObjectsOK := moveToObjects.OfType.(*graphql.InputObject)
   179  		assert.True(t, moveToObjectsObjectsOK)
   180  		assert.Equal(t, 2, len(moveToObjectsObjects.Fields()))
   181  		assert.NotNil(t, moveToObjectsObjects.Fields()["id"])
   182  		assert.NotNil(t, moveToObjectsObjects.Fields()["beacon"])
   183  		assert.NotNil(t, moveTo.Fields()["force"])
   184  		_, moveToForceOK := moveTo.Fields()["force"].Type.(*graphql.NonNull)
   185  		assert.True(t, moveToForceOK)
   186  		assert.NotNil(t, fields["moveAwayFrom"])
   187  		moveAwayFrom, moveAwayFromOK := fields["moveAwayFrom"].Type.(*graphql.InputObject)
   188  		assert.True(t, moveAwayFromOK)
   189  		assert.NotNil(t, moveAwayFrom.Fields()["concepts"])
   190  		assert.NotNil(t, moveAwayFrom.Fields()["objects"])
   191  		moveAwayFromObjects, moveAwayFromObjectsOK := moveAwayFrom.Fields()["objects"].Type.(*graphql.List)
   192  		assert.True(t, moveAwayFromObjectsOK)
   193  		moveAwayFromObjectsObjects, moveAwayFromObjectsObjectsOK := moveAwayFromObjects.OfType.(*graphql.InputObject)
   194  		assert.Equal(t, 2, len(moveAwayFromObjectsObjects.Fields()))
   195  		assert.True(t, moveAwayFromObjectsObjectsOK)
   196  		assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["id"])
   197  		assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["beacon"])
   198  		assert.NotNil(t, moveAwayFrom.Fields()["force"])
   199  		_, moveAwayFromForceOK := moveAwayFrom.Fields()["force"].Type.(*graphql.NonNull)
   200  		assert.True(t, moveAwayFromForceOK)
   201  		targetVectors := fields["targetVectors"]
   202  		targetVectorsList, targetVectorsListOK := targetVectors.Type.(*graphql.List)
   203  		assert.True(t, targetVectorsListOK)
   204  		assert.NotNil(t, targetVectorsList)
   205  		assert.Equal(t, "String", targetVectorsList.OfType.Name())
   206  		assert.NotNil(t, targetVectors)
   207  	})
   208  }