1 package de.dlr.shepard.context.references.uri.services;
2
3 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
4 import static org.junit.jupiter.api.Assertions.assertEquals;
5 import static org.junit.jupiter.api.Assertions.assertThrows;
6 import static org.mockito.Mockito.when;
7
8 import de.dlr.shepard.auth.security.AuthenticationContext;
9 import de.dlr.shepard.auth.users.entities.User;
10 import de.dlr.shepard.auth.users.services.UserService;
11 import de.dlr.shepard.common.exceptions.InvalidPathException;
12 import de.dlr.shepard.common.util.DateHelper;
13 import de.dlr.shepard.context.collection.entities.DataObject;
14 import de.dlr.shepard.context.collection.services.DataObjectService;
15 import de.dlr.shepard.context.references.uri.daos.URIReferenceDAO;
16 import de.dlr.shepard.context.references.uri.entities.URIReference;
17 import de.dlr.shepard.context.references.uri.io.URIReferenceIO;
18 import de.dlr.shepard.context.version.daos.VersionDAO;
19 import de.dlr.shepard.context.version.entities.Version;
20 import io.quarkus.test.InjectMock;
21 import io.quarkus.test.component.QuarkusComponentTest;
22 import jakarta.inject.Inject;
23 import java.util.Date;
24 import java.util.List;
25 import java.util.UUID;
26 import org.junit.jupiter.api.Test;
27
28 @QuarkusComponentTest
29 public class URIReferenceServiceTest {
30
31 @InjectMock
32 URIReferenceDAO dao;
33
34 @InjectMock
35 VersionDAO versionDAO;
36
37 @InjectMock
38 DataObjectService dataObjectService;
39
40 @InjectMock
41 UserService userService;
42
43 @InjectMock
44 DateHelper dateHelper;
45
46 @InjectMock
47 AuthenticationContext authenticationContext;
48
49 @Inject
50 URIReferenceService service;
51
52 private final long collectionId = 12345L;
53 private final User user = new User("Testuser");
54
55 @Test
56 public void getURIReferenceByShepardIdTest_successful() {
57 URIReference ref = new URIReference(1L);
58 ref.setShepardId(15L);
59
60 DataObject dataObject = new DataObject(123L);
61 dataObject.setShepardId(54321L);
62 dataObject.setReferences(List.of(ref));
63 ref.setDataObject(dataObject);
64
65 when(dao.findByShepardId(ref.getShepardId(), null)).thenReturn(ref);
66 URIReference actual = service.getReference(collectionId, dataObject.getShepardId(), ref.getShepardId(), null);
67 assertEquals(ref, actual);
68 }
69
70 @Test
71 public void getURIReferenceByShepardIdTest_notFound() {
72 Long shepardId = 15L;
73 when(dao.findByShepardId(shepardId)).thenReturn(null);
74
75 var ex = assertThrows(InvalidPathException.class, () -> service.getReference(collectionId, 4321L, shepardId, null));
76 assertEquals("ID ERROR - URI Reference with id 15 is null or deleted", ex.getMessage());
77 }
78
79 @Test
80 public void getURIReferenceByShepardIdTestIsDeleted() {
81 Long shepardId = 15L;
82 URIReference ref = new URIReference(20L);
83 ref.setShepardId(shepardId);
84 ref.setDeleted(true);
85 when(dao.findByShepardId(shepardId)).thenReturn(ref);
86
87 var ex = assertThrows(InvalidPathException.class, () -> service.getReference(collectionId, 4321L, shepardId, null));
88 assertEquals("ID ERROR - URI Reference with id 15 is null or deleted", ex.getMessage());
89 }
90
91 @Test
92 public void getAllURIReferencesByShepardIdTest() {
93 DataObject dataObject = new DataObject(200L);
94 dataObject.setShepardId(2005L);
95 URIReference ref1 = new URIReference(1L);
96 ref1.setShepardId(15L);
97 URIReference ref2 = new URIReference(2L);
98 ref2.setShepardId(25L);
99 dataObject.setReferences(List.of(ref1, ref2));
100
101 when(dao.findByDataObjectShepardId(dataObject.getShepardId())).thenReturn(List.of(ref1, ref2));
102
103 List<URIReference> actual = service.getAllReferencesByDataObjectId(collectionId, dataObject.getShepardId(), null);
104
105 assertEquals(List.of(ref1, ref2), actual);
106 }
107
108 @Test
109 public void createURIReferenceByShepardIdTest() {
110 Version version = new Version(new UUID(1L, 2L));
111 DataObject dataObject = new DataObject(200L);
112 dataObject.setShepardId(2005L);
113 Date date = new Date(30L);
114 URIReferenceIO input = new URIReferenceIO() {
115 {
116 setName("MyName");
117 setUri("http;//example.com");
118 }
119 };
120 URIReference toCreate = new URIReference() {
121 {
122 setCreatedAt(date);
123 setCreatedBy(user);
124 setDataObject(dataObject);
125 setName(input.getName());
126 setUri(input.getUri());
127 }
128 };
129 URIReference created = new URIReference() {
130 {
131 setId(1L);
132 setCreatedAt(toCreate.getCreatedAt());
133 setCreatedBy(toCreate.getCreatedBy());
134 setDataObject(toCreate.getDataObject());
135 setName(toCreate.getName());
136 setUri(toCreate.getUri());
137 }
138 };
139 URIReference createdWithShepardId = new URIReference() {
140 {
141 setId(created.getId());
142 setShepardId(created.getId());
143 setCreatedAt(created.getCreatedAt());
144 setCreatedBy(created.getCreatedBy());
145 setDataObject(created.getDataObject());
146 setName(created.getName());
147 setUri(created.getUri());
148 }
149 };
150 when(userService.getCurrentUser()).thenReturn(user);
151 when(dataObjectService.getDataObject(collectionId, dataObject.getShepardId())).thenReturn(dataObject);
152 when(dao.createOrUpdate(toCreate)).thenReturn(created);
153 when(dao.createOrUpdate(createdWithShepardId)).thenReturn(createdWithShepardId);
154 when(dateHelper.getDate()).thenReturn(date);
155 when(versionDAO.findVersionLightByNeo4jId(dataObject.getId())).thenReturn(version);
156 when(authenticationContext.getCurrentUserName()).thenReturn(user.getUsername());
157
158 URIReference actual = service.createReference(collectionId, dataObject.getShepardId(), input);
159 assertEquals(createdWithShepardId, actual);
160 }
161
162 @Test
163 public void deleteReferenceByShepardIdTest() {
164 Date date = new Date(30L);
165 URIReference ref = new URIReference(1L);
166 ref.setShepardId(15L);
167 URIReference expected = new URIReference(ref.getId());
168 expected.setShepardId(ref.getShepardId());
169 expected.setDeleted(true);
170 expected.setUpdatedAt(date);
171 expected.setUpdatedBy(user);
172
173 DataObject dataObject = new DataObject(123L);
174 dataObject.setShepardId(54321L);
175 dataObject.setReferences(List.of(ref));
176 ref.setDataObject(dataObject);
177
178 when(userService.getCurrentUser()).thenReturn(user);
179 when(dao.findByShepardId(ref.getShepardId(), null)).thenReturn(ref);
180 when(dateHelper.getDate()).thenReturn(date);
181 when(authenticationContext.getCurrentUserName()).thenReturn(user.getUsername());
182
183 assertDoesNotThrow(() -> service.deleteReference(collectionId, dataObject.getShepardId(), ref.getShepardId()));
184 }
185 }