KON-14 - Kontakte-Modulzuordnung Suche, Doku, Fix für ContactPersonen/E-Mail
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/constants/Constants.java b/src/main/java/org/eclipse/openk/contactbasedata/constants/Constants.java
index dd2bdcc..c62049a 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/constants/Constants.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/constants/Constants.java
@@ -18,6 +18,7 @@
     public static final String PERSON_TYPE_UUID_NOT_EXISTING = "personType.uuid.not.existing";
     public static final String ADDRESS_TYPE_UUID_NOT_EXISTING = "addressType.uuid.not.existing";
     public static final String CONTACT_UUID_NOT_EXISTING = "contact.uuid.not.existing";
+    public static final String MODULE_ASSIGNMENT_UUID_NOT_EXISTING = "module.assignment.uuid.not.existing";
 
     private Constants() {
         // empty Constructor for the sake of SONAR
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactController.java
index 3794865..5694d05 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactController.java
@@ -52,6 +52,18 @@
         return assignmentModulContactService.getAssignments(contactUuid);
     }
 
+    @GetMapping("/{contactUuid}/assignments/{assignmentUuid}")
+    @ApiOperation(value = "Lesen einer Zuordnung Kontakt:Modul")
+    @ApiResponses(value = {
+            @ApiResponse(code = 404, message = "Zuordnung nicht gefunden."),
+            @ApiResponse(code = 400, message = "Ungültige Anfrage."),
+            @ApiResponse(code = 200, message = "Zuordnung erfolgreich ermittelt.")})
+    public AssignmentModulContactDto getAssignment(
+            @PathVariable UUID contactUuid,
+            @PathVariable UUID assignmentUuid) {
+        return assignmentModulContactService.getAssignment(contactUuid, assignmentUuid);
+    }
+
 
     @PostMapping("/{contactUuid}/assignments")
     @ApiOperation(value = "Anlegen einer neuen Zuordnung Kontakt:Modul")
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
index 7222e2a..bd5ce40 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactService.java
@@ -52,6 +52,17 @@
         return tblAssignmentsList.stream().map(assignmentModulContactMapper::toAssignmentModulContactDto).collect(Collectors.toList());
     }
 
+    public AssignmentModulContactDto getAssignment(UUID contactUuid, UUID assignmentUuid ) {
+
+        TblAssignmentModulContact tblAssign = assignmentModulContactRepository.findByUuid(assignmentUuid)
+                    .orElseThrow(() -> new NotFoundException(Constants.MODULE_ASSIGNMENT_UUID_NOT_EXISTING));
+
+        if(!tblAssign.getTblContact().getUuid().equals(contactUuid)) {
+            throw new NotFoundException(Constants.CONTACT_UUID_NOT_EXISTING);
+        }
+        return assignmentModulContactMapper.toAssignmentModulContactDto(tblAssign);
+    }
+
     @Transactional
     public AssignmentModulContactDto insertAssignment(UUID contactUuid, AssignmentModulContactDto assignmentDto) {
 
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactControllerTest.java
index 4309700..197b0c7 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/AssignmentModulContactControllerTest.java
@@ -62,6 +62,18 @@
 
 
     @Test
+    public void shouldReturnAssignmentForAContact() throws Exception {
+        AssignmentModulContactDto dto = MockDataHelper.mockAssignmentModulContactDto();
+
+        when(assignmentService.getAssignment(any(UUID.class), any(UUID.class))).thenReturn(dto);
+
+        mockMvc.perform(get("/contacts/{uuid}/assignments/{uuid}", UUID.randomUUID(), UUID.randomUUID()))
+                .andExpect(status().is2xxSuccessful())
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+
+
+    @Test
     public void shouldInsertAssignment() throws Exception {
         AssignmentModulContactDto assignmentDto = MockDataHelper.mockAssignmentModulContactDto();
         assignmentDto.setUuid(UUID.fromString("394dce82-41af-11ea-b77f-2e728ce88125"));
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactServiceTest.java
index 81ed9f9..92b9a83 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/AssignmentModulContactServiceTest.java
@@ -67,6 +67,24 @@
         assertEquals(tblAssignmentsList.size(), 2 );
     }
 
+
+    @Test
+    public void shouldReturnSingleAssignmentsByContactUuidAndAssignUuid() {
+        TblAssignmentModulContact tblAssignment = MockDataHelper.mockTblAssignmentModulContact();
+        when(assignmentRepository.findByUuid(any(UUID.class)) ).thenReturn(Optional.of(tblAssignment));
+
+        AssignmentModulContactDto assignmentDto = assignmentService.getAssignment(
+                tblAssignment.getTblContact().getUuid(), UUID.randomUUID());
+        assertEquals(assignmentDto.getContactUuid(), tblAssignment.getTblContact().getUuid() );
+
+        // try it with a not matching contactUUID
+        assertThrows(NotFoundException.class, () -> assignmentService.getAssignment(UUID.randomUUID(), UUID.randomUUID()));
+
+        // try it with an empty repository result
+        when(assignmentRepository.findByUuid(any(UUID.class))).thenReturn(Optional.empty());
+        assertThrows(NotFoundException.class, () ->
+                assignmentService.getAssignment(assignmentDto.getContactUuid(), UUID.randomUUID()));
+    }
     @Test
     public void shouldUpdateAssignment() {
         TblAssignmentModulContact tblAssignment = MockDataHelper.mockTblAssignmentModulContact();