package aql import ( "encoding/json" "fmt" "sort" "testing" "git.science.uu.nl/graphpolaris/query-conversion/entity" "github.com/stretchr/testify/assert" ) func TestHierarchyBasic(t *testing.T) { // Setup for test // Create query conversion service query := []byte(`{ "return": { "entities": [ 0, 1 ], "relations": [ 0 ], "groupBys": [] }, "entities": [ { "name": "parliament", "ID": 0 }, { "name": "parties", "ID": 1 } ], "relations": [ { "ID": 0, "name": "member_of", "depth": { "min": 1, "max": 1 }, "fromType": "entity", "fromID": 0, "toType": "entity", "toID": 1 } ], "groupBys": [], "filters": [ { "ID": 0, "filteredType": "entity", "filteredID": 0, "attribute": "age", "dataType": "int", "matchType": "NEQ", "value": "40", "inType": "", "inID": 0 }, { "ID": 1, "filteredType": "relation", "filteredID": 0, "attribute": "isChairman", "dataType": "bool", "matchType": "exact", "value": "true", "inType": "", "inID": 0 } ], "limit": 5000 } `) // Unmarshall the incoming message into an IncomingJSONQuery object var JSONQuery entity.IncomingQueryJSON json.Unmarshal(query, &JSONQuery) search(&JSONQuery, 0) // Assert that the result and the expected result are the same correctResult := `[[{entity 0} {entity 1}] [{filter 0}] [{relation 0}] [{filter 1}]]` assert.Equal(t, correctResult, fmt.Sprint(listoflists)) } func TestHierarchyRandomStart(t *testing.T) { // Setup for test // Create query conversion service query := []byte(`{ "return": { "entities": [ 0, 1 ], "relations": [ 0 ], "groupBys": [] }, "entities": [ { "name": "parties", "ID": 1 }, { "name": "parliament", "ID": 0 } ], "relations": [ { "ID": 0, "name": "member_of", "depth": { "min": 1, "max": 1 }, "fromType": "entity", "fromID": 0, "toType": "entity", "toID": 1 } ], "groupBys": [], "filters": [ { "ID": 0, "filteredType": "entity", "filteredID": 0, "attribute": "age", "dataType": "int", "matchType": "NEQ", "value": "40", "inType": "", "inID": 0 }, { "ID": 1, "filteredType": "relation", "filteredID": 0, "attribute": "isChairman", "dataType": "bool", "matchType": "exact", "value": "true", "inType": "", "inID": 0 } ], "limit": 5000 } `) // Unmarshall the incoming message into an IncomingJSONQuery object var JSONQuery entity.IncomingQueryJSON json.Unmarshal(query, &JSONQuery) correctResult := make([]pdictList, 4) correctResult[0] = pdictList{{typename: "entity", pointer: 0}, {typename: "entity", pointer: 1}} correctResult[1] = pdictList{{typename: "filter", pointer: 0}} correctResult[2] = pdictList{{typename: "relation", pointer: 0}} correctResult[3] = pdictList{{typename: "filter", pointer: 1}} for i := range JSONQuery.Entities { search(&JSONQuery, i) sortedListOfLists := make([]pdictList, len(listoflists)) for i, list := range listoflists { k := make(pdictList, list.Len()) copy(k, list) sort.Sort(k) sortedListOfLists[i] = k } fmt.Println(listoflists) fmt.Println(sortedListOfLists) //for i, x := range listoflists assert.Equal(t, fmt.Sprint(correctResult), fmt.Sprint(sortedListOfLists)) } } func TestHierarchyWithGroupby(t *testing.T) { // Setup for test // Create query conversion service query := []byte(`{ "return": { "entities": [ 0, 1 ], "relations": [ 0 ], "groupBys": [] }, "entities": [ { "name": "parties", "ID": 1 }, { "name": "parliament", "ID": 0 } ], "relations": [ { "ID": 0, "name": "member_of", "depth": { "min": 1, "max": 1 }, "fromType": "entity", "fromID": 0, "toType": "entity", "toID": 1 } ], "groupBys": [], "filters": [ { "ID": 0, "filteredType": "entity", "filteredID": 0, "attribute": "age", "dataType": "int", "matchType": "NEQ", "value": "40", "inType": "", "inID": 0 }, { "ID": 1, "filteredType": "relation", "filteredID": 0, "attribute": "isChairman", "dataType": "bool", "matchType": "exact", "value": "true", "inType": "", "inID": 0 } ], "limit": 5000 } `) // Unmarshall the incoming message into an IncomingJSONQuery object var JSONQuery entity.IncomingQueryJSON json.Unmarshal(query, &JSONQuery) correctResult := make([]pdictList, 4) correctResult[0] = pdictList{{typename: "entity", pointer: 0}, {typename: "entity", pointer: 1}} correctResult[1] = pdictList{{typename: "filter", pointer: 0}} correctResult[2] = pdictList{{typename: "relation", pointer: 0}} correctResult[3] = pdictList{{typename: "filter", pointer: 1}} for i := range JSONQuery.Entities { search(&JSONQuery, i) sortedListOfLists := make([]pdictList, len(listoflists)) for i, list := range listoflists { k := make(pdictList, list.Len()) copy(k, list) sort.Sort(k) sortedListOfLists[i] = k } fmt.Println(listoflists) fmt.Println(sortedListOfLists) //for i, x := range listoflists assert.Equal(t, fmt.Sprint(correctResult), fmt.Sprint(sortedListOfLists)) } }