Skip to content

Commit 12c70c0

Browse files
committed
test: add more test for traversals
These tests are useful to ensure that the next commit, which is a big refactoring, does not break any of the cases. It also makes it easier to see how exactly the AQL generation changes.
1 parent bbee205 commit 12c70c0

File tree

77 files changed

+3260
-124
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+3260
-124
lines changed

spec/dev/model/simple.graphqls

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ type Skill @valueObject {
5050
}
5151

5252
"A superhero movie"
53-
type Movie @rootEntity @roles(read: ["logistics-reader"]) {
53+
type Movie @rootEntity {
5454
name: String
5555
"All the heroes starring in this movie"
5656
heroes: [Hero] @relation
@@ -71,6 +71,7 @@ type Movie @rootEntity @roles(read: ["logistics-reader"]) {
7171
type Director @rootEntity {
7272
name: String
7373
movies: [Movie] @relation(inverseOf: "director")
74+
allMissions: [Mission] @collect(path: "movies.heroes.missions", aggregate: DISTINCT)
7475
}
7576

7677
"A description of a hero suit"

spec/regression/collect/model/model.graphqls

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,26 @@ type Shipment @rootEntity {
1010
@collect(path: "deliveries.handlingUnits", aggregate: DISTINCT)
1111
allHandlingUnits: [HandlingUnit]
1212
@collect(path: "deliveries.allHandlingUnits", aggregate: DISTINCT)
13+
outerHandlingUnitCount: Int @collect(path: "deliveries.handlingUnits", aggregate: COUNT)
14+
distinctOuterHandlingUnitCount: Int
15+
@collect(path: "deliveries.handlingUnits", aggregate: COUNT_DISTINCT)
1316
allOrders: [Order] @collect(path: "deliveries.order", aggregate: DISTINCT)
17+
allInvoices: [Invoice] @collect(path: "deliveries.invoices")
1418
allDeliveryContents: [DeliveryContent] @collect(path: "deliveries.deliveryContents")
1519
allItems: [DeliveryItem] @collect(path: "deliveries.deliveryContents.items")
20+
allDeliveryLocationIdentCodes: [String]
21+
@collect(path: "deliveries.location.identCode", aggregate: DISTINCT)
1622
totalWeightInKg: Decimal3 @collect(path: "allItems.weightInKg", aggregate: SUM)
1723
maxPriority: Int @collect(path: "deliveries.priority", aggregate: MAX)
1824
itemCount: Int @collect(path: "allItems", aggregate: COUNT)
1925
deliveryCount: Int @collect(path: "deliveries", aggregate: COUNT)
2026
allDeliveriesHaveOrders: Boolean @collect(path: "deliveries.order", aggregate: NONE_NULL)
27+
allDeliveriesHaveOriginalOrders: Boolean
28+
@collect(path: "deliveries.order.originalOrder", aggregate: NONE_NULL)
2129
allDeliveriesArePayed: Boolean @collect(path: "deliveries.order.payedAt", aggregate: NONE_NULL)
2230
numberOfDeliveriesWithoutOrder: Int @collect(path: "deliveries.order", aggregate: COUNT_NULL)
31+
numberOfDeliveriesWithoutOriginalOrder: Int
32+
@collect(path: "deliveries.order.originalOrder", aggregate: COUNT_NULL)
2333
numberOfDeliveriesWithoutPayedOrder: Int
2434
@collect(path: "deliveries.order.payedAt", aggregate: COUNT_NULL)
2535
#numberOfUnpayedOrders: Int @collect(path: "allOrders.payedAt", aggregate: COUNT_NULL) # waiting for DISTINCT aggregations to be supported in collect paths
@@ -40,6 +50,7 @@ type Delivery @rootEntity {
4050
handlingUnits: [HandlingUnit] @relation
4151
shipment: Shipment @relation(inverseOf: "deliveries")
4252
order: Order @relation
53+
invoices: [Invoice] @relation
4354

4455
allItems: [DeliveryItem] @collect(path: "deliveryContents.items")
4556
allItemNumbers: [String]
@@ -105,6 +116,7 @@ type Order @rootEntity {
105116
accessGroup: String
106117
location: Location @accessField
107118
payedAt: DateTime
119+
originalOrder: Order @relation # so we can have two 1-to-1 relations in a row
108120
payload: String
109121

110122
delivery: Delivery @relation(inverseOf: "order")
@@ -113,6 +125,15 @@ type Order @rootEntity {
113125
allItems: [DeliveryItem] @collect(path: "delivery.allItems")
114126
}
115127

128+
type Invoice @rootEntity {
129+
invoiceNumber: String @key
130+
accessGroup: String
131+
location: Location @accessField
132+
payload: String
133+
134+
delivery: Delivery @relation(inverseOf: "invoices")
135+
}
136+
116137
type DeliveryContent @childEntity {
117138
deliveryContentNumber: String
118139
payload: String
@@ -125,6 +146,9 @@ type DeliveryItem @childEntity {
125146
weightInKg: Decimal3
126147
isDangerousGoods: Boolean
127148
payload: String
149+
subItems: [DeliveryItem]
150+
151+
subSubItems: [DeliveryItem] @collect(path: "subItems.subItems")
128152
}
129153

130154
type WarehouseSlot @valueObject {

spec/regression/collect/test-data.json

Lines changed: 111 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,64 @@
2121
"itemNumber": "DI1.1.1",
2222
"weightInKg": 1.2,
2323
"isDangerousGoods": true,
24-
"payload": "@{randomString(10000)}"
24+
"payload": "@{randomString(10000)}",
25+
"subItems": [
26+
{
27+
"itemNumber": "SDI1.1.1.1",
28+
"weightInKg": 0.6,
29+
"subItems": [
30+
{
31+
"itemNumber": "SSD1.1.1.1.1.1"
32+
},
33+
{
34+
"itemNumber": "SSD1.1.1.1.1.2"
35+
}
36+
]
37+
},
38+
{
39+
"itemNumber": "SDI1.1.1.2",
40+
"weightInKg": 0.6,
41+
"subItems": [
42+
{
43+
"itemNumber": "SSD1.1.1.1.2.1"
44+
},
45+
{
46+
"itemNumber": "SSD1.1.1.1.2.2"
47+
}
48+
]
49+
}
50+
]
2551
},
2652
{
2753
"itemNumber": "DI1.1.2",
2854
"weightInKg": 2.2,
29-
"payload": "@{randomString(10000)}"
55+
"payload": "@{randomString(10000)}",
56+
"subItems": [
57+
{
58+
"itemNumber": "SDI1.1.2.1",
59+
"weightInKg": 0.6,
60+
"subItems": [
61+
{
62+
"itemNumber": "SSD1.1.2.1.1.2"
63+
},
64+
{
65+
"itemNumber": "SSD1.1.2.1.1.2"
66+
}
67+
]
68+
},
69+
{
70+
"itemNumber": "SDI1.1.2.2",
71+
"weightInKg": 0.6,
72+
"subItems": [
73+
{
74+
"itemNumber": "SSD1.1.2.1.2.1"
75+
},
76+
{
77+
"itemNumber": "SSD1.1.2.1.2.2"
78+
}
79+
]
80+
}
81+
]
3082
}
3183
]
3284
},
@@ -290,6 +342,19 @@
290342
"level": 0
291343
},
292344
"payload": "@{randomString(10000)}"
345+
},
346+
{
347+
"@id": "5",
348+
"handlingUnitNumber": "H5",
349+
"accessGroup": "H5",
350+
"location": {
351+
"identCode": "licH5"
352+
},
353+
"warehouseSlot": {
354+
"warehouse": "North",
355+
"level": 0
356+
},
357+
"payload": "@{randomString(10000)}"
293358
}
294359
],
295360
"Order": [
@@ -330,6 +395,50 @@
330395
},
331396
"payload": "@{randomString(10000)}"
332397
}
398+
],
399+
"Invoice": [
400+
{
401+
"@id": "1",
402+
"invoiceNumber": "I1",
403+
"accessGroup": "I1",
404+
"location": { "identCode": "licI1" },
405+
"payload": "@{randomString(10000)}"
406+
},
407+
{
408+
"@id": "2",
409+
"invoiceNumber": "I2",
410+
"accessGroup": "I2",
411+
"location": { "identCode": "licI2" },
412+
"payload": "@{randomString(10000)}"
413+
},
414+
{
415+
"@id": "3",
416+
"invoiceNumber": "I3",
417+
"accessGroup": "I3",
418+
"location": { "identCode": "licI3" },
419+
"payload": "@{randomString(10000)}"
420+
},
421+
{
422+
"@id": "4",
423+
"invoiceNumber": "I4",
424+
"accessGroup": "I4",
425+
"location": { "identCode": "licI4" },
426+
"payload": "@{randomString(10000)}"
427+
},
428+
{
429+
"@id": "5",
430+
"invoiceNumber": "I5",
431+
"accessGroup": "I5",
432+
"location": { "identCode": "licI5" },
433+
"payload": "@{randomString(10000)}"
434+
},
435+
{
436+
"@id": "6",
437+
"invoiceNumber": "I6",
438+
"accessGroup": "D6",
439+
"location": { "identCode": "licI6" },
440+
"payload": "@{randomString(10000)}"
441+
}
333442
]
334443
}
335444
}

spec/regression/collect/tests/collect-edge-count/aql/deleteDelivery.aql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ RETURN (
3232

3333
// ----------------------------------------------------------------
3434

35+
RETURN (
36+
FOR v_from1 IN (FOR v_id1 IN @v_ids1 RETURN CONCAT(@var1, v_id1))
37+
FOR v_edge1 IN @@deliveries_invoices
38+
FILTER v_edge1._from == v_from1
39+
REMOVE v_edge1 IN @@deliveries_invoices
40+
)
41+
42+
// Peak memory usage: 32768 bytes
43+
44+
// ----------------------------------------------------------------
45+
3546
RETURN (
3647
FOR v_to1 IN (FOR v_id1 IN @v_ids1 RETURN CONCAT(@var1, v_id1))
3748
FOR v_edge1 IN @@shipments_deliveries

spec/regression/collect/tests/collect-edge-count/test.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# make sure that counting edges does not include dangling edges
22
# obviously, there should be no dangling edges because we should delete them properly, but this test is probably still
33
# a good idea
4+
# TODO this does not actually test if dangling edges are filtered because deleteDelivery deletes the edges
5+
# if we want to test that, we need an test-data.ts that uses AQL directly
46

57
mutation createEdges {
68
updateShipment(

spec/regression/collect/tests/field-aggregation/aql/fields.aql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,4 @@ RETURN {
139139
)
140140
}
141141

142-
// Peak memory usage: 1310720 bytes
142+
// Peak memory usage: 1343488 bytes
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": (
11+
FOR v_deliveryItem1
12+
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13+
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14+
RETURN {
15+
"itemNumber": v_deliveryItem1.`itemNumber`
16+
}
17+
)
18+
})
19+
}
20+
21+
// Peak memory usage: 163840 bytes
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": (
11+
FOR v_deliveryItem1
12+
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13+
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14+
SORT (v_deliveryItem1.`itemNumber`) DESC
15+
RETURN {
16+
"itemNumber": v_deliveryItem1.`itemNumber`
17+
}
18+
)
19+
})
20+
}
21+
22+
// Peak memory usage: 163840 bytes
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": (
11+
FOR v_deliveryItem1
12+
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13+
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14+
SORT (v_deliveryItem1.`itemNumber`) DESC
15+
LIMIT @var5, @var6
16+
RETURN {
17+
"itemNumber": v_deliveryItem1.`itemNumber`
18+
}
19+
)
20+
})
21+
}
22+
23+
// Peak memory usage: 163840 bytes

0 commit comments

Comments
 (0)