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.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 }