1 package de.dlr.shepard.context.collection.services;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
5
6 import de.dlr.shepard.auth.security.AuthenticationContext;
7 import de.dlr.shepard.auth.security.JWTPrincipal;
8 import de.dlr.shepard.auth.users.entities.User;
9 import de.dlr.shepard.auth.users.services.UserService;
10 import de.dlr.shepard.context.collection.entities.Collection;
11 import de.dlr.shepard.context.collection.entities.DataObject;
12 import de.dlr.shepard.context.collection.io.CollectionIO;
13 import de.dlr.shepard.context.collection.io.DataObjectIO;
14 import de.dlr.shepard.context.references.dataobject.entities.DataObjectReference;
15 import de.dlr.shepard.context.references.dataobject.io.DataObjectReferenceIO;
16 import de.dlr.shepard.context.references.dataobject.services.CollectionReferenceService;
17 import de.dlr.shepard.context.references.dataobject.services.DataObjectReferenceService;
18 import de.dlr.shepard.context.references.file.services.FileReferenceService;
19 import de.dlr.shepard.context.references.structureddata.services.StructuredDataReferenceService;
20 import de.dlr.shepard.context.references.timeseriesreference.services.TimeseriesReferenceService;
21 import de.dlr.shepard.context.version.daos.VersionDAO;
22 import de.dlr.shepard.context.version.services.VersionService;
23 import de.dlr.shepard.data.file.services.FileContainerService;
24 import de.dlr.shepard.data.structureddata.services.StructuredDataContainerService;
25 import de.dlr.shepard.data.structureddata.services.StructuredDataService;
26 import de.dlr.shepard.data.timeseries.services.TimeseriesContainerService;
27 import de.dlr.shepard.data.timeseries.services.TimeseriesService;
28 import io.quarkus.test.junit.QuarkusTest;
29 import jakarta.inject.Inject;
30 import jakarta.transaction.Transactional;
31 import java.util.Map;
32 import org.junit.jupiter.api.BeforeEach;
33 import org.junit.jupiter.api.Test;
34
35 @QuarkusTest
36 public class DataObjectServiceQuarkusTest {
37
38 @Inject
39 CollectionService collectionService;
40
41 @Inject
42 UserService userService;
43
44 @Inject
45 AuthenticationContext authenticationContext;
46
47 @Inject
48 TimeseriesService timeseriesService;
49
50 @Inject
51 StructuredDataContainerService structuredDataContainerService;
52
53 @Inject
54 FileContainerService fileContainerService;
55
56 @Inject
57 FileReferenceService fileReferenceService;
58
59 @Inject
60 VersionDAO versionDAO;
61
62 @Inject
63 TimeseriesReferenceService timeseriesReferenceService;
64
65 @Inject
66 TimeseriesContainerService timeseriesContainerService;
67
68 @Inject
69 StructuredDataService structuredDataService;
70
71 @Inject
72 StructuredDataReferenceService structuredDataReferenceService;
73
74 @Inject
75 DataObjectService dataObjectService;
76
77 @Inject
78 DataObjectReferenceService dataObjectReferenceService;
79
80 @Inject
81 VersionService versionService;
82
83 @Inject
84 CollectionReferenceService collectionReferenceService;
85
86 private Collection collection;
87
88 private final String userName = "user_name";
89 private final String collectionName = "collection_name";
90
91 private DataObject createDataObject(DataObjectIO dataObjectToCreate) {
92 return dataObjectService.createDataObject(collection.getId(), dataObjectToCreate);
93 }
94
95 private DataObjectReference createDataObjectReference(
96 long collectionId,
97 String name,
98 DataObject referencingDataObject,
99 DataObject referencedDataObject
100 ) {
101 DataObjectReferenceIO dorIO = new DataObjectReferenceIO();
102 dorIO.setName(name);
103 dorIO.setReferencedDataObjectId(referencedDataObject.getShepardId());
104 return dataObjectReferenceService.createReference(collectionId, referencingDataObject.getShepardId(), dorIO);
105 }
106
107 @BeforeEach
108 public void setup() {
109 User user = new User(userName);
110 userService.createOrUpdateUser(user);
111 authenticationContext.setPrincipal(new JWTPrincipal(userName, "key"));
112 CollectionIO collectionIO = new CollectionIO();
113 collectionIO.setName(collectionName);
114 collection = collectionService.createCollection(collectionIO);
115 collection.setPermissions(null);
116 }
117
118 @Test
119 @Transactional
120 public void testCutDeleted() {
121 DataObject parentOfFirstDataObject = createDataObject(
122 new DataObjectIOBuilder().setName("parentCentralDataObject").build()
123 );
124
125 DataObject survivingPredecessor = createDataObject(new DataObjectIOBuilder().setName("survivor").build());
126 DataObject deletedPredecessor = createDataObject(new DataObjectIOBuilder().setName("toBeDeleted").build());
127 long[] firstDataObjectPredecessorIds = { survivingPredecessor.getShepardId(), deletedPredecessor.getShepardId() };
128
129 DataObject firstDataObject = createDataObject(
130 new DataObjectIOBuilder()
131 .setName("firstDataObject")
132 .setParentId(parentOfFirstDataObject.getShepardId())
133 .setPredecessorIds(firstDataObjectPredecessorIds)
134 .build()
135 );
136 DataObject referencingDataObject = createDataObject(
137 new DataObjectIOBuilder().setName("referencingDataObject").build()
138 );
139 DataObjectReference referenceToFirstDataObject = createDataObjectReference(
140 collection.getShepardId(),
141 "referenceToFirstDataObject",
142 referencingDataObject,
143 firstDataObject
144 );
145
146 DataObject firstDataObjectReloaded = dataObjectService.getDataObject(
147 collection.getShepardId(),
148 firstDataObject.getShepardId()
149 );
150 assertEquals(firstDataObjectReloaded.getIncoming().get(0).getId(), referenceToFirstDataObject.getId());
151 assertEquals(referencingDataObject.getReferences().get(0).getId(), referenceToFirstDataObject.getId());
152
153 dataObjectReferenceService.deleteReference(
154 collection.getShepardId(),
155 referencingDataObject.getShepardId(),
156 referenceToFirstDataObject.getShepardId()
157 );
158
159 firstDataObjectReloaded = dataObjectService.getDataObject(
160 collection.getShepardId(),
161 firstDataObject.getShepardId()
162 );
163
164
165
166 dataObjectService.clearSession();
167
168 DataObject referencingDataObjectReloaded = dataObjectService.getDataObject(
169 collection.getShepardId(),
170 referencingDataObject.getShepardId()
171 );
172 assertEquals(0, firstDataObjectReloaded.getIncoming().size());
173 assertEquals(0, referencingDataObjectReloaded.getReferences().size());
174
175 dataObjectService.deleteDataObject(collection.getShepardId(), deletedPredecessor.getShepardId());
176 firstDataObjectReloaded = dataObjectService.getDataObject(firstDataObject.getShepardId());
177 assertEquals(1, firstDataObjectReloaded.getPredecessors().size());
178 assertEquals(survivingPredecessor.getId(), firstDataObjectReloaded.getPredecessors().get(0).getId());
179 dataObjectService.deleteDataObject(collection.getShepardId(), firstDataObject.getShepardId());
180 DataObject survivingPredecessorReloaded = dataObjectService.getDataObject(survivingPredecessor.getShepardId());
181 assertEquals(0, survivingPredecessorReloaded.getSuccessors().size());
182 DataObject parentOfFirsDataObjectReloaded = dataObjectService.getDataObject(parentOfFirstDataObject.getShepardId());
183 assertEquals(0, parentOfFirsDataObjectReloaded.getChildren().size());
184 }
185
186 @Test
187 public void deleteParentOfDataObject_success() {
188
189 DataObject parent = createDataObject(new DataObjectIOBuilder().build());
190 DataObjectIO dataObjectIO = new DataObjectIOBuilder().setParentId(parent.getId()).build();
191 DataObject dataObject = createDataObject(dataObjectIO);
192
193
194 dataObjectIO.setParentId(null);
195 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
196
197
198 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
199 assertEquals(null, actualDataObject.getParent());
200 }
201
202 @Test
203 public void deletePredecessorsOfDataObject_success() {
204
205 DataObject predecessor = createDataObject(new DataObjectIOBuilder().build());
206 DataObjectIO dataObjectIO = new DataObjectIOBuilder().setPredecessorIds(new long[] { predecessor.getId() }).build();
207 DataObject dataObject = createDataObject(dataObjectIO);
208
209
210 dataObjectIO.setPredecessorIds(null);
211 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
212
213
214 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
215 assertTrue(actualDataObject.getPredecessors().isEmpty());
216 }
217
218 @Test
219 public void deleteParentOfDataObjectWithPredecessors_success() {
220
221 DataObject parent = createDataObject(new DataObjectIOBuilder().build());
222 DataObject predecessor = createDataObject(new DataObjectIOBuilder().build());
223 DataObjectIO dataObjectIO = new DataObjectIOBuilder()
224 .setParentId(parent.getId())
225 .setPredecessorIds(new long[] { predecessor.getId() })
226 .build();
227 DataObject dataObject = createDataObject(dataObjectIO);
228
229
230 dataObjectIO.setParentId(null);
231 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
232
233
234 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
235 assertEquals(null, actualDataObject.getParent());
236 }
237
238 @Test
239 public void deletePredecessorOfDataObjectWithParent_success() {
240
241 DataObject parent = createDataObject(new DataObjectIOBuilder().build());
242 DataObject predecessor = createDataObject(new DataObjectIOBuilder().build());
243 DataObjectIO dataObjectIO = new DataObjectIOBuilder()
244 .setParentId(parent.getId())
245 .setPredecessorIds(new long[] { predecessor.getId() })
246 .build();
247 DataObject dataObject = createDataObject(dataObjectIO);
248
249
250 dataObjectIO.setPredecessorIds(null);
251 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
252
253
254 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
255 assertTrue(actualDataObject.getPredecessors().isEmpty());
256 }
257
258 @Test
259 public void deleteAllPredecessorsAndParentOfDataObjectWithParent_success() {
260
261 DataObject parent = createDataObject(new DataObjectIOBuilder().build());
262 DataObject predecessor = createDataObject(new DataObjectIOBuilder().build());
263 DataObjectIO dataObjectIO = new DataObjectIOBuilder()
264 .setParentId(parent.getId())
265 .setPredecessorIds(new long[] { predecessor.getId() })
266 .build();
267 DataObject dataObject = createDataObject(dataObjectIO);
268
269
270 dataObjectIO.setPredecessorIds(null);
271 dataObjectIO.setParentId(null);
272 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
273
274
275 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
276 assertEquals(null, actualDataObject.getParent());
277 assertTrue(actualDataObject.getPredecessors().isEmpty());
278 }
279
280 @Test
281 public void deleteAttributesOfDataObject_success() {
282
283 DataObjectIO dataObjectIO = new DataObjectIOBuilder().setAttributes(Map.of("name", "my data object")).build();
284 DataObject dataObject = createDataObject(dataObjectIO);
285
286
287 dataObjectIO.setAttributes(Map.of());
288 dataObjectService.updateDataObject(collection.getShepardId(), dataObject.getShepardId(), dataObjectIO);
289
290
291 DataObject actualDataObject = dataObjectService.getDataObject(dataObject.getShepardId());
292 assertEquals(Map.of(), actualDataObject.getAttributes());
293 }
294 }