View Javadoc
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 }