From 4621c186339a502d7fa010cef5376a03825c7c1f Mon Sep 17 00:00:00 2001
From: thijsheijden <hi@thijsheijden.nl>
Date: Tue, 20 Apr 2021 15:45:44 +0200
Subject: [PATCH] Added check to make sure entityFrom and entityTo can be less
 than -1

---
 internal/usecases/convertquery/aql.go      | 14 ++-----
 internal/usecases/convertquery/aql_test.go | 48 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/internal/usecases/convertquery/aql.go b/internal/usecases/convertquery/aql.go
index e6678f8..f2bf420 100644
--- a/internal/usecases/convertquery/aql.go
+++ b/internal/usecases/convertquery/aql.go
@@ -92,25 +92,19 @@ func createQuery(jsonQuery *entity.QueryParsedJSON) *string {
 	for i, relation := range jsonQuery.Relations {
 		relationName := fmt.Sprintf("r%v", i)
 
-		if relation.EntityFrom != -1 {
+		if relation.EntityFrom >= 0 {
 			// if there is a from-node
 			// create the let for this node
 			fromName := fmt.Sprintf("n%v", relation.EntityFrom)
 
-			// Check if this entity index exists
-			if entity := &jsonQuery.Entities[relation.EntityFrom]; entity != nil {
-				ret += *createNodeLet(entity, &fromName)
-			}
+			ret += *createNodeLet(&jsonQuery.Entities[relation.EntityFrom], &fromName)
 
 			ret += *createRelationLetWithFromEntity(&relation, relationName, &jsonQuery.Entities, jsonQuery.Limit)
-		} else if relation.EntityTo != -1 {
+		} else if relation.EntityTo >= 0 {
 			// if there is only a to-node
 			toName := fmt.Sprintf("n%v", relation.EntityTo)
 
-			// Check if this entity index exists
-			if entity := &jsonQuery.Entities[relation.EntityTo]; entity != nil {
-				ret += *createNodeLet(entity, &toName)
-			}
+			ret += *createNodeLet(&jsonQuery.Entities[relation.EntityTo], &toName)
 
 			ret += *createRelationLetWithOnlyToEntity(&relation, relationName, &jsonQuery.Entities, jsonQuery.Limit)
 			// Add this relation to the list
diff --git a/internal/usecases/convertquery/aql_test.go b/internal/usecases/convertquery/aql_test.go
index d025bc5..13f2c75 100644
--- a/internal/usecases/convertquery/aql_test.go
+++ b/internal/usecases/convertquery/aql_test.go
@@ -550,3 +550,51 @@ func TestNoRelationsField(t *testing.T) {
 	cleanedResult = strings.ReplaceAll(cleanedResult, "\t", "")
 	assert.Equal(t, correctConvertedResult, cleanedResult)
 }
+
+func TestEntityFromLowerThanNegativeOneInRelation(t *testing.T) {
+	// Setup for test
+	// Create query conversion service
+	service := NewService()
+
+	query := []byte(`{
+			"return": {
+				"entities": [
+					0
+				],
+				"relations": [
+					0
+				]
+			},
+			"entities": [
+				{
+					"type": "airports",
+					"constraints": [
+						{
+							"attribute": "city",
+							"value": "San Francisco",
+							"dataType": "text",
+							"matchType": "exact"
+						}
+					]
+				}
+			],
+			"relations": [
+				{
+					"type": "flights",
+					"depth": {
+						"min": 1,
+						"max": 1
+					},
+					"entityFrom": -4,
+					"entityTo": 0,
+					"constraints": []
+				}
+			],
+			"limit": 5000
+		}`)
+
+	_, err := service.ConvertQuery(&query)
+
+	// Assert that there is no error
+	assert.NoError(t, err)
+}
-- 
GitLab