1 package de.dlr.shepard.context.version.daos;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.mockito.Mockito.when;
5
6 import de.dlr.shepard.BaseTestCase;
7 import de.dlr.shepard.common.neo4j.entities.BasicEntity;
8 import de.dlr.shepard.common.util.CypherQueryHelper;
9 import de.dlr.shepard.context.version.entities.Version;
10 import de.dlr.shepard.context.version.entities.VersionableEntity;
11 import java.util.Collections;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.UUID;
16 import org.junit.jupiter.api.Test;
17 import org.mockito.InjectMocks;
18 import org.mockito.Mock;
19 import org.neo4j.ogm.session.Session;
20
21 public class VersionableEntityDAOTest extends BaseTestCase {
22
23 private static class TestObject extends BasicEntity implements VersionableEntity {
24
25 @Override
26 public Long getShepardId() {
27 return 11L;
28 }
29
30 @Override
31 public Version getVersion() {
32 return null;
33 }
34 }
35
36 private static class TestDAO extends VersionableEntityDAO<TestObject> {
37
38 @Override
39 public Class<TestObject> getEntityType() {
40 return TestObject.class;
41 }
42 }
43
44 @Mock
45 private Session session;
46
47 @InjectMocks
48 private TestDAO dao = new TestDAO();
49
50 @Test
51 public void findByShepardIdTest() {
52 TestObject ent = new TestObject();
53 ent.setId(1L);
54 Map<String, Object> paramsMap = new HashMap<>();
55 String query =
56 "MATCH (o:TestObject {deleted: FALSE})-[:has_version]->(v:Version) WHERE o.shepardId in " +
57 "[" +
58 ent.getShepardId() +
59 "]" +
60 " AND " +
61 CypherQueryHelper.getVersionHeadPart("v") +
62 " WITH o MATCH path=(o)-[*0..1]-(n) WHERE n.deleted = FALSE OR n.deleted IS NULL RETURN o, nodes(path), relationships(path)";
63 when(session.query(TestObject.class, query, paramsMap)).thenReturn(List.of(ent));
64 VersionableEntity actual = dao.findByShepardId(ent.getShepardId());
65 assertEquals(ent, actual);
66 }
67
68 @Test
69 public void findByShepardIdWithVersionUIDTest() {
70 TestObject ent = new TestObject();
71 ent.setId(1L);
72 UUID versionUID = new UUID(1L, 2L);
73 Map<String, Object> paramsMap = new HashMap<>();
74 String query =
75 "MATCH (o:TestObject {deleted: FALSE})-[:has_version]->(v:Version) WHERE o.shepardId = 11 AND (v.uid = '00000000-0000-0001-0000-000000000002') WITH o MATCH path=(o)-[*0..1]-(n) WHERE n.deleted = FALSE OR n.deleted IS NULL RETURN o, nodes(path), relationships(path)";
76 when(session.query(TestObject.class, query, paramsMap)).thenReturn(List.of(ent));
77 VersionableEntity actual = dao.findByShepardId(ent.getShepardId(), versionUID);
78 assertEquals(ent, actual);
79 }
80
81 @Test
82 public void findByShepardIdNotFoundTest() {
83 TestObject ent = new TestObject();
84 ent.setId(1L);
85 Map<String, Object> paramsMap = new HashMap<>();
86 String query =
87 "MATCH (o {deleted: FALSE}) WHERE o.shepardId = 11 WITH o MATCH path=(o)-[*0..1]-(n) WHERE n.deleted = FALSE OR n.deleted IS NULL RETURN o, nodes(path), relationships(path)";
88 when(session.query(TestObject.class, query, paramsMap)).thenReturn(Collections.emptyList());
89 VersionableEntity actual = dao.findByShepardId(ent.getShepardId());
90 assertEquals(null, actual);
91 }
92
93 @Test
94 public void findLightByShepardIdTest() {
95 TestObject ent = new TestObject();
96 ent.setId(1L);
97 Map<String, Object> paramsMap = new HashMap<>();
98 String query =
99 "MATCH (o:TestObject {deleted: FALSE})-[:has_version]->(v:Version) WHERE o.shepardId in " +
100 "[" +
101 ent.getShepardId() +
102 "]" +
103 " AND " +
104 CypherQueryHelper.getVersionHeadPart("v") +
105 " WITH o RETURN o";
106 when(session.query(TestObject.class, query, paramsMap)).thenReturn(List.of(ent));
107 VersionableEntity actual = dao.findByShepardId(ent.getShepardId(), true);
108 assertEquals(ent, actual);
109 }
110
111 @Test
112 public void findLightByShepardIdNotFoundTest() {
113 TestObject ent = new TestObject();
114 ent.setId(1L);
115 Map<String, Object> paramsMap = new HashMap<>();
116 String query = "MATCH (o {deleted: FALSE}) WHERE o.shepardId = 11 WITH o RETURN o";
117 when(session.query(TestObject.class, query, paramsMap)).thenReturn(Collections.emptyList());
118 VersionableEntity actual = dao.findByShepardId(ent.getShepardId(), true);
119 assertEquals(null, actual);
120 }
121 }