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 }