-
Jonge,J. de (Joes) authoredJonge,J. de (Joes) authored
hierarchy_test.go 5.27 KiB
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))
}
}