View Javadoc
1   package de.dlr.shepard.common.search.services;
2   
3   import static org.assertj.core.api.Assertions.assertThat;
4   import static org.mockito.Mockito.when;
5   
6   import de.dlr.shepard.auth.users.entities.User;
7   import de.dlr.shepard.auth.users.services.UserService;
8   import de.dlr.shepard.common.neo4j.entities.BasicContainer;
9   import de.dlr.shepard.common.neo4j.entities.ContainerType;
10  import de.dlr.shepard.common.neo4j.io.BasicContainerIO;
11  import de.dlr.shepard.common.search.daos.SearchDAO;
12  import de.dlr.shepard.common.search.io.ContainerSearchBody;
13  import de.dlr.shepard.common.search.io.ContainerSearchParams;
14  import de.dlr.shepard.common.search.query.Neo4jQueryBuilder;
15  import de.dlr.shepard.common.util.Constants;
16  import de.dlr.shepard.common.util.SortingHelper;
17  import de.dlr.shepard.data.file.daos.FileContainerDAO;
18  import de.dlr.shepard.data.file.entities.FileContainer;
19  import de.dlr.shepard.data.structureddata.daos.StructuredDataContainerDAO;
20  import de.dlr.shepard.data.structureddata.entities.StructuredDataContainer;
21  import de.dlr.shepard.data.timeseries.daos.TimeseriesContainerDAO;
22  import de.dlr.shepard.data.timeseries.model.TimeseriesContainer;
23  import io.quarkus.test.InjectMock;
24  import io.quarkus.test.component.QuarkusComponentTest;
25  import jakarta.inject.Inject;
26  import java.util.ArrayList;
27  import java.util.List;
28  import org.junit.jupiter.api.Test;
29  
30  @QuarkusComponentTest
31  public class ContainerSearchServiceTest {
32  
33    @InjectMock
34    TimeseriesContainerDAO timeseriesContainerDAO;
35  
36    @InjectMock
37    StructuredDataContainerDAO structuredDataContainerDAO;
38  
39    @InjectMock
40    FileContainerDAO fileContainerDAO;
41  
42    @InjectMock
43    SearchDAO searchDAO;
44  
45    @Inject
46    ContainerSearchService containerSearcher;
47  
48    @InjectMock
49    UserService userService;
50  
51    private final User user = new User("Testuser");
52  
53    @Test
54    public void searchBasicContainerTest() {
55      String JSONquery = "{\"property\": \"name\", \"value\": \"MyName\", \"operator\": \"eq\"}";
56      ContainerSearchParams params = new ContainerSearchParams(JSONquery, ContainerType.BASIC);
57      ContainerSearchBody searchBody = new ContainerSearchBody(params);
58      String neo4jFileSelectionQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
59        JSONquery,
60        ContainerType.BASIC,
61        new SortingHelper(null, null),
62        user.getUsername()
63      );
64      BasicContainer contRes = new BasicContainer(5L);
65      List<BasicContainer> contResList = new ArrayList<>();
66      contResList.add(contRes);
67  
68      when(searchDAO.findContainers(neo4jFileSelectionQuery, null, Constants.BASICCONTAINER_IN_QUERY)).thenReturn(
69        contResList
70      );
71      when(userService.getCurrentUser()).thenReturn(user);
72  
73      var actual = containerSearcher.search(searchBody, null, new SortingHelper(null, null));
74      assertThat(actual.getResults()).containsExactly(new BasicContainerIO(contRes));
75      assertThat(actual.getSearchParams()).isEqualTo(params);
76    }
77  
78    @Test
79    public void searchFileContainerTest() {
80      String JSONquery = "{\"property\": \"name\", \"value\": \"MyName\", \"operator\": \"eq\"}";
81      ContainerSearchParams params = new ContainerSearchParams(JSONquery, ContainerType.FILE);
82      ContainerSearchBody searchBody = new ContainerSearchBody(params);
83      String neo4jFileSelectionQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
84        JSONquery,
85        ContainerType.FILE,
86        new SortingHelper(null, null),
87        user.getUsername()
88      );
89      FileContainer fileRes = new FileContainer(5L);
90      List<BasicContainer> fileResList = new ArrayList<>();
91      fileResList.add(fileRes);
92  
93      when(searchDAO.findContainers(neo4jFileSelectionQuery, null, Constants.FILECONTAINER_IN_QUERY)).thenReturn(
94        fileResList
95      );
96      when(userService.getCurrentUser()).thenReturn(user);
97  
98      var actual = containerSearcher.search(searchBody, null, new SortingHelper(null, null));
99      assertThat(actual.getResults()).containsExactly(new BasicContainerIO(fileRes));
100     assertThat(actual.getSearchParams()).isEqualTo(params);
101   }
102 
103   @Test
104   public void searchTimeseriesContainerTest() {
105     String JSONquery = "{\"property\": \"name\", \"value\": \"MyName\", \"operator\": \"eq\"}";
106     ContainerSearchParams params = new ContainerSearchParams(JSONquery, ContainerType.TIMESERIES);
107     ContainerSearchBody searchBody = new ContainerSearchBody(params);
108     String neo4jTimeseriesQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
109       JSONquery,
110       ContainerType.TIMESERIES,
111       new SortingHelper(null, null),
112       user.getUsername()
113     );
114     TimeseriesContainer timeRes1 = new TimeseriesContainer(5L);
115     TimeseriesContainer timeRes2 = new TimeseriesContainer(8L);
116     List<BasicContainer> timeResList = List.of(timeRes1, timeRes2);
117     when(searchDAO.findContainers(neo4jTimeseriesQuery, null, Constants.TIMESERIESCONTAINER_IN_QUERY)).thenReturn(
118       timeResList
119     );
120     when(userService.getCurrentUser()).thenReturn(user);
121 
122     var actual = containerSearcher.search(searchBody, null, new SortingHelper(null, null));
123     assertThat(actual.getResults()).containsExactly(new BasicContainerIO(timeRes1), new BasicContainerIO(timeRes2));
124   }
125 
126   @Test
127   public void searchStructuredDataContainerTest() {
128     String JSONquery = "{\"property\": \"name\", \"value\": \"MyName\",\"operator\": \"eq\"}";
129     ContainerSearchParams params = new ContainerSearchParams(JSONquery, ContainerType.STRUCTUREDDATA);
130     ContainerSearchBody searchBody = new ContainerSearchBody(params);
131     String neo4jStructuredDataSelectionQuery = Neo4jQueryBuilder.containerSelectionQueryWithNeo4jId(
132       JSONquery,
133       ContainerType.STRUCTUREDDATA,
134       new SortingHelper(null, null),
135       user.getUsername()
136     );
137     StructuredDataContainer sdRes1 = new StructuredDataContainer(5L);
138     StructuredDataContainer sdRes2 = new StructuredDataContainer(8L);
139     List<BasicContainer> sdResList = List.of(sdRes1, sdRes2);
140     when(
141       searchDAO.findContainers(neo4jStructuredDataSelectionQuery, null, Constants.STRUCTUREDDATACONTAINER_IN_QUERY)
142     ).thenReturn(sdResList);
143     when(userService.getCurrentUser()).thenReturn(user);
144 
145     var actual = containerSearcher.search(searchBody, null, new SortingHelper(null, null));
146     assertThat(actual.getResults()).containsExactly(new BasicContainerIO(sdRes1), new BasicContainerIO(sdRes2));
147   }
148 }