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