View Javadoc
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 }