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 }