Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package nearText | |
import ( | |
"testing" | |
"github.com/stretchr/testify/assert" | |
"github.com/tailor-inc/graphql" | |
) | |
func TestNearTextGraphQLArgument(t *testing.T) { | |
t.Run("should generate nearText argument properly", func(t *testing.T) { | |
// given | |
prefix := "Prefix" | |
classname := "Class" | |
// when | |
nearText := New(nil).nearTextArgument(prefix, classname) | |
// then | |
// the built graphQL field needs to support this structure: | |
// { | |
// concepts: ["c1", "c2"], | |
// distance: 0.9, | |
// moveTo: { | |
// concepts: ["c1", "c2"], | |
// objects: [ | |
// { id: "some-uuid-value"}], | |
// { beacon: "some-beacon-value"} | |
// ], | |
// force: 0.8 | |
// } | |
// moveAwayFrom: { | |
// concepts: ["c1", "c2"], | |
// objects: [ | |
// { id: "some-uuid-value"}], | |
// { beacon: "some-beacon-value"} | |
// ], | |
// force: 0.8 | |
// } | |
// } | |
assert.NotNil(t, nearText) | |
assert.Equal(t, "PrefixClassNearTextInpObj", nearText.Type.Name()) | |
nearTextFields, ok := nearText.Type.(*graphql.InputObject) | |
assert.True(t, ok) | |
assert.NotNil(t, nearTextFields) | |
assert.Equal(t, 5, len(nearTextFields.Fields())) | |
fields := nearTextFields.Fields() | |
concepts := fields["concepts"] | |
conceptsNonNull, conceptsNonNullOK := concepts.Type.(*graphql.NonNull) | |
assert.True(t, conceptsNonNullOK) | |
conceptsNonNullList, conceptsNonNullListOK := conceptsNonNull.OfType.(*graphql.List) | |
assert.True(t, conceptsNonNullListOK) | |
assert.Equal(t, "String", conceptsNonNullList.OfType.Name()) | |
assert.NotNil(t, concepts) | |
conceptsType, conceptsTypeOK := concepts.Type.(*graphql.NonNull) | |
assert.True(t, conceptsTypeOK) | |
assert.NotNil(t, conceptsType) | |
assert.NotNil(t, fields["certainty"]) | |
assert.NotNil(t, fields["distance"]) | |
assert.NotNil(t, fields["moveTo"]) | |
moveTo, moveToOK := fields["moveTo"].Type.(*graphql.InputObject) | |
assert.True(t, moveToOK) | |
assert.Equal(t, 3, len(moveTo.Fields())) | |
assert.NotNil(t, moveTo.Fields()["concepts"]) | |
moveToConcepts, moveToConceptsOK := moveTo.Fields()["concepts"].Type.(*graphql.List) | |
assert.True(t, moveToConceptsOK) | |
assert.Equal(t, "String", moveToConcepts.OfType.Name()) | |
assert.NotNil(t, moveToConcepts) | |
assert.NotNil(t, moveTo.Fields()["objects"]) | |
moveToObjects, moveToObjectsOK := moveTo.Fields()["objects"].Type.(*graphql.List) | |
assert.True(t, moveToObjectsOK) | |
moveToObjectsObjects, moveToObjectsObjectsOK := moveToObjects.OfType.(*graphql.InputObject) | |
assert.True(t, moveToObjectsObjectsOK) | |
assert.Equal(t, 2, len(moveToObjectsObjects.Fields())) | |
assert.NotNil(t, moveToObjectsObjects.Fields()["id"]) | |
assert.NotNil(t, moveToObjectsObjects.Fields()["beacon"]) | |
assert.NotNil(t, moveTo.Fields()["force"]) | |
_, moveToForceOK := moveTo.Fields()["force"].Type.(*graphql.NonNull) | |
assert.True(t, moveToForceOK) | |
assert.NotNil(t, fields["moveAwayFrom"]) | |
moveAwayFrom, moveAwayFromOK := fields["moveAwayFrom"].Type.(*graphql.InputObject) | |
assert.True(t, moveAwayFromOK) | |
assert.NotNil(t, moveAwayFrom.Fields()["concepts"]) | |
assert.NotNil(t, moveAwayFrom.Fields()["objects"]) | |
moveAwayFromObjects, moveAwayFromObjectsOK := moveAwayFrom.Fields()["objects"].Type.(*graphql.List) | |
assert.True(t, moveAwayFromObjectsOK) | |
moveAwayFromObjectsObjects, moveAwayFromObjectsObjectsOK := moveAwayFromObjects.OfType.(*graphql.InputObject) | |
assert.Equal(t, 2, len(moveAwayFromObjectsObjects.Fields())) | |
assert.True(t, moveAwayFromObjectsObjectsOK) | |
assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["id"]) | |
assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["beacon"]) | |
assert.NotNil(t, moveAwayFrom.Fields()["force"]) | |
_, moveAwayFromForceOK := moveAwayFrom.Fields()["force"].Type.(*graphql.NonNull) | |
assert.True(t, moveAwayFromForceOK) | |
}) | |
} | |
func TestNearTextGraphQLArgumentWithAutocorrect(t *testing.T) { | |
t.Run("should generate nearText argument with autocorrect properly", func(t *testing.T) { | |
// given | |
prefix := "Prefix" | |
classname := "Class" | |
// when | |
nearText := New(&fakeTransformer{}).nearTextArgument(prefix, classname) | |
// then | |
// the built graphQL field needs to support this structure: | |
// { | |
// concepts: ["c1", "c2"], | |
// certainty: 0.9, | |
// autocorrect: true, | |
// moveTo: { | |
// concepts: ["c1", "c2"], | |
// objects: [ | |
// { id: "some-uuid-value"}], | |
// { beacon: "some-beacon-value"} | |
// ], | |
// force: 0.8 | |
// } | |
// moveAwayFrom: { | |
// concepts: ["c1", "c2"], | |
// objects: [ | |
// { id: "some-uuid-value"}], | |
// { beacon: "some-beacon-value"} | |
// ], | |
// force: 0.8 | |
// } | |
// } | |
assert.NotNil(t, nearText) | |
assert.Equal(t, "PrefixClassNearTextInpObj", nearText.Type.Name()) | |
nearTextFields, ok := nearText.Type.(*graphql.InputObject) | |
assert.True(t, ok) | |
assert.NotNil(t, nearTextFields) | |
assert.Equal(t, 6, len(nearTextFields.Fields())) | |
fields := nearTextFields.Fields() | |
concepts := fields["concepts"] | |
conceptsNonNull, conceptsNonNullOK := concepts.Type.(*graphql.NonNull) | |
assert.True(t, conceptsNonNullOK) | |
conceptsNonNullList, conceptsNonNullListOK := conceptsNonNull.OfType.(*graphql.List) | |
assert.True(t, conceptsNonNullListOK) | |
assert.Equal(t, "String", conceptsNonNullList.OfType.Name()) | |
assert.NotNil(t, concepts) | |
conceptsType, conceptsTypeOK := concepts.Type.(*graphql.NonNull) | |
assert.True(t, conceptsTypeOK) | |
assert.NotNil(t, conceptsType) | |
assert.NotNil(t, fields["certainty"]) | |
assert.NotNil(t, fields["distance"]) | |
assert.NotNil(t, fields["autocorrect"]) | |
assert.NotNil(t, fields["moveTo"]) | |
moveTo, moveToOK := fields["moveTo"].Type.(*graphql.InputObject) | |
assert.True(t, moveToOK) | |
assert.Equal(t, 3, len(moveTo.Fields())) | |
assert.NotNil(t, moveTo.Fields()["concepts"]) | |
moveToConcepts, moveToConceptsOK := moveTo.Fields()["concepts"].Type.(*graphql.List) | |
assert.True(t, moveToConceptsOK) | |
assert.Equal(t, "String", moveToConcepts.OfType.Name()) | |
assert.NotNil(t, moveToConcepts) | |
assert.NotNil(t, moveTo.Fields()["objects"]) | |
moveToObjects, moveToObjectsOK := moveTo.Fields()["objects"].Type.(*graphql.List) | |
assert.True(t, moveToObjectsOK) | |
moveToObjectsObjects, moveToObjectsObjectsOK := moveToObjects.OfType.(*graphql.InputObject) | |
assert.True(t, moveToObjectsObjectsOK) | |
assert.Equal(t, 2, len(moveToObjectsObjects.Fields())) | |
assert.NotNil(t, moveToObjectsObjects.Fields()["id"]) | |
assert.NotNil(t, moveToObjectsObjects.Fields()["beacon"]) | |
assert.NotNil(t, moveTo.Fields()["force"]) | |
_, moveToForceOK := moveTo.Fields()["force"].Type.(*graphql.NonNull) | |
assert.True(t, moveToForceOK) | |
assert.NotNil(t, fields["moveAwayFrom"]) | |
moveAwayFrom, moveAwayFromOK := fields["moveAwayFrom"].Type.(*graphql.InputObject) | |
assert.True(t, moveAwayFromOK) | |
assert.NotNil(t, moveAwayFrom.Fields()["concepts"]) | |
assert.NotNil(t, moveAwayFrom.Fields()["objects"]) | |
moveAwayFromObjects, moveAwayFromObjectsOK := moveAwayFrom.Fields()["objects"].Type.(*graphql.List) | |
assert.True(t, moveAwayFromObjectsOK) | |
moveAwayFromObjectsObjects, moveAwayFromObjectsObjectsOK := moveAwayFromObjects.OfType.(*graphql.InputObject) | |
assert.Equal(t, 2, len(moveAwayFromObjectsObjects.Fields())) | |
assert.True(t, moveAwayFromObjectsObjectsOK) | |
assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["id"]) | |
assert.NotNil(t, moveAwayFromObjectsObjects.Fields()["beacon"]) | |
assert.NotNil(t, moveAwayFrom.Fields()["force"]) | |
_, moveAwayFromForceOK := moveAwayFrom.Fields()["force"].Type.(*graphql.NonNull) | |
assert.True(t, moveAwayFromForceOK) | |
}) | |
} | |