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