1 package de.dlr.shepard.common.util;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4
5 import de.dlr.shepard.common.neo4j.endpoints.OrderByAttribute;
6 import de.dlr.shepard.common.search.endpoints.BasicContainerAttributes;
7 import de.dlr.shepard.common.util.CypherQueryHelper.Neighborhood;
8 import de.dlr.shepard.context.collection.endpoints.DataObjectAttributes;
9 import org.junit.jupiter.api.Test;
10
11 public class CypherQueryHelperTest {
12
13 @Test
14 public void getReturnPartTest() {
15 var actual = CypherQueryHelper.getReturnPart("entity");
16 assertEquals(
17 "MATCH path=(entity)-[*0..1]-(n) WHERE n.deleted = FALSE OR n.deleted IS NULL RETURN entity, nodes(path), relationships(path)",
18 actual
19 );
20 }
21
22 @Test
23 public void getReturnPartTest_omitIncoming() {
24 var actual = CypherQueryHelper.getReturnPart("entity", Neighborhood.OUTGOING);
25 assertEquals(
26 "MATCH path=(entity)-[*0..1]->(n) WHERE n.deleted = FALSE OR n.deleted IS NULL RETURN entity, nodes(path), relationships(path)",
27 actual
28 );
29 }
30
31 @Test
32 public void getReturnPartTest_noNeighbors() {
33 var actual = CypherQueryHelper.getReturnPart("entity", Neighborhood.ESSENTIAL);
34 assertEquals(
35 "MATCH path=(entity)-[*0..1]->(n) WHERE n:Permission OR n:User RETURN entity, nodes(path), relationships(path)",
36 actual
37 );
38 }
39
40 @Test
41 public void getOrderByPartTestDesc() {
42 String variable = "c";
43 OrderByAttribute orderByAttribute = DataObjectAttributes.createdAt;
44 Boolean orderDesc = true;
45 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
46 assertEquals("ORDER BY c.createdAt DESC", actual);
47 }
48
49 @Test
50 public void getOrderByPartTestNull() {
51 String variable = "c";
52 OrderByAttribute orderByAttribute = DataObjectAttributes.createdAt;
53 Boolean orderDesc = null;
54 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
55 assertEquals("ORDER BY c.createdAt", actual);
56 }
57
58 @Test
59 public void getOrderByPartTestAsc() {
60 String variable = "c";
61 OrderByAttribute orderByAttribute = DataObjectAttributes.createdAt;
62 Boolean orderDesc = false;
63 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
64 assertEquals("ORDER BY c.createdAt", actual);
65 }
66
67 @Test
68 public void getOrderByPartTestStringDesc() {
69 String variable = "c";
70 OrderByAttribute orderByAttribute = DataObjectAttributes.name;
71 Boolean orderDesc = true;
72 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
73 assertEquals("ORDER BY toLower(c.name) DESC", actual);
74 }
75
76 @Test
77 public void getOrderByPartTestStringNull() {
78 String variable = "c";
79 OrderByAttribute orderByAttribute = DataObjectAttributes.name;
80 Boolean orderDesc = null;
81 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
82 assertEquals("ORDER BY toLower(c.name)", actual);
83 }
84
85 @Test
86 public void getOrderByPartTestStringAsc() {
87 String variable = "c";
88 OrderByAttribute orderByAttribute = DataObjectAttributes.name;
89 Boolean orderDesc = null;
90 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
91 assertEquals("ORDER BY toLower(c.name)", actual);
92 }
93
94 @Test
95 public void getOrderByPartTestByType() {
96 String variable = "c";
97 OrderByAttribute orderByAttribute = BasicContainerAttributes.type;
98 Boolean orderDesc = null;
99 var actual = CypherQueryHelper.getOrderByPart(variable, orderByAttribute, orderDesc);
100 assertEquals("ORDER BY LABELS(c)", actual);
101 }
102
103 @Test
104 public void getObjectPartTest_WithName() {
105 String variable = "c";
106 String type = "Collection";
107 var actual = CypherQueryHelper.getObjectPart(variable, type, true);
108 assertEquals("(c:Collection { name : $name, deleted: FALSE })", actual);
109 }
110
111 @Test
112 public void getObjectPartTest_WithoutName() {
113 String variable = "c";
114 String type = "Collection";
115 var actual = CypherQueryHelper.getObjectPart(variable, type, false);
116 assertEquals("(c:Collection { deleted: FALSE })", actual);
117 }
118
119 @Test
120 public void getPaginationPartTest_NoParams() {
121 var actual = CypherQueryHelper.getPaginationPart();
122 assertEquals("SKIP $offset LIMIT $size", actual);
123 }
124
125 @Test
126 public void getPaginationPartTest_WithParams() {
127 PaginationHelper pagnationParam = new PaginationHelper(1, 10);
128 var actual = CypherQueryHelper.getPaginationPart(pagnationParam);
129 assertEquals("SKIP 10 LIMIT 10", actual);
130 }
131
132 @Test
133 public void getReturnCountPartTest() {
134 var actual = CypherQueryHelper.getReturnCountPart("c", Neighborhood.ESSENTIAL);
135 assertEquals("MATCH path=(c)-[*0..1]->(n) WHERE n:Permission OR n:User RETURN COUNT(c)", actual);
136 }
137
138 @Test
139 public void getReadableByQueryTest() {
140 var expected =
141 """
142 (NOT exists((var)-[:has_permissions]->(:Permissions)) \
143 OR exists((var)-[:has_permissions]->(:Permissions)-[:readable_by|owned_by]->(:User { username: \"bob\" })) \
144 OR exists((var)-[:has_permissions]->(:Permissions {permissionType: \"Public\"})) \
145 OR exists((var)-[:has_permissions]->(:Permissions {permissionType: \"PublicReadable\"})) \
146 OR exists((var)-[:has_permissions]->(:Permissions)-[:readable_by_group]->(:UserGroup)<-[:is_in_group]-(:User { username: \"bob\"})))""";
147 var actual = CypherQueryHelper.getReadableByQuery("var", "bob");
148
149 assertEquals(expected, actual);
150 }
151 }