diff --git a/src/main/java/com/savvato/tribeapp/dto/ConnectOutgoingMessageDTO.java b/src/main/java/com/savvato/tribeapp/dto/ConnectOutgoingMessageDTO.java index 92657be6..99b87025 100644 --- a/src/main/java/com/savvato/tribeapp/dto/ConnectOutgoingMessageDTO.java +++ b/src/main/java/com/savvato/tribeapp/dto/ConnectOutgoingMessageDTO.java @@ -10,5 +10,5 @@ public class ConnectOutgoingMessageDTO { public String message; - public Long to; + public UsernameDTO to; } diff --git a/src/main/java/com/savvato/tribeapp/services/ConnectServiceImpl.java b/src/main/java/com/savvato/tribeapp/services/ConnectServiceImpl.java index 4e6aa0a4..a8010832 100644 --- a/src/main/java/com/savvato/tribeapp/services/ConnectServiceImpl.java +++ b/src/main/java/com/savvato/tribeapp/services/ConnectServiceImpl.java @@ -3,6 +3,7 @@ import com.savvato.tribeapp.controllers.dto.ConnectionRemovalRequest; import com.savvato.tribeapp.dto.ConnectIncomingMessageDTO; import com.savvato.tribeapp.dto.ConnectOutgoingMessageDTO; +import com.savvato.tribeapp.dto.UsernameDTO; import com.savvato.tribeapp.entities.Connection; import com.savvato.tribeapp.repositories.ConnectionsRepository; import com.savvato.tribeapp.repositories.UserRepository; @@ -112,21 +113,32 @@ public List handleConnectionIntent(String connectionI if (connectionIntent == "") { rtn.add(ConnectOutgoingMessageDTO.builder() .message("Please confirm that you wish to connect.") - .to(toBeConnectedWithUserId) + .to(UsernameDTO.builder() + .userId(toBeConnectedWithUserId) + .username(userRepository.findById(toBeConnectedWithUserId).get().getName()) + .build()) .build()); + + return rtn; } else if (connectionIntent == "confirmed") { Boolean connectionStatus = saveConnectionDetails(requestingUserId, toBeConnectedWithUserId); for(Long id : allRecipients) { if (connectionStatus) { rtn.add(ConnectOutgoingMessageDTO.builder() .connectionSuccess(true) - .to(id) + .to(UsernameDTO.builder() + .userId(id) + .username(userRepository.findById(id).get().getName()) + .build()) .message("Successfully saved connection!") .build()); } else { rtn.add(ConnectOutgoingMessageDTO.builder() .connectionError(true) - .to(id) + .to(UsernameDTO.builder() + .userId(id) + .username(userRepository.findById(id).get().getName()) + .build()) .message("Failed to save connection to database.") .build()); } @@ -135,7 +147,10 @@ public List handleConnectionIntent(String connectionI for(Long id : allRecipients) { rtn.add(ConnectOutgoingMessageDTO.builder() .connectionError(true) - .to(id) + .to(UsernameDTO.builder() + .userId(id) + .username(userRepository.findById(id).get().getName()) + .build()) .message("Connection request denied.") .build()); } @@ -153,7 +168,10 @@ public List getAllConnectionsForAUser(Long userId) { for (Connection connection : connections) { ConnectOutgoingMessageDTO outgoingMessage = ConnectOutgoingMessageDTO.builder() .connectionSuccess(true) - .to(connection.getRequestingUserId()) + .to(UsernameDTO.builder() + .userId(connection.getRequestingUserId()) + .username(userRepository.findById(connection.getRequestingUserId()).get().getName()) + .build()) .message("") .build(); outgoingMessages.add(outgoingMessage); diff --git a/src/test/java/com/savvato/tribeapp/controllers/ConnectAPITest.java b/src/test/java/com/savvato/tribeapp/controllers/ConnectAPITest.java index 2cc25fea..a6ea7e34 100644 --- a/src/test/java/com/savvato/tribeapp/controllers/ConnectAPITest.java +++ b/src/test/java/com/savvato/tribeapp/controllers/ConnectAPITest.java @@ -326,7 +326,10 @@ public void testGetConnectionsHappyPath() throws Exception { .connectionError(null) .connectionSuccess(true) .message("") - .to(requestingUserId) + .to(UsernameDTO.builder() + .userId(requestingUserId) + .username("test") + .build()) .build(); List expectedReturnDtoList = new ArrayList<>(); diff --git a/src/test/java/com/savvato/tribeapp/services/AbstractServiceImplTest.java b/src/test/java/com/savvato/tribeapp/services/AbstractServiceImplTest.java index 0452f5f6..58024d67 100644 --- a/src/test/java/com/savvato/tribeapp/services/AbstractServiceImplTest.java +++ b/src/test/java/com/savvato/tribeapp/services/AbstractServiceImplTest.java @@ -1,6 +1,7 @@ package com.savvato.tribeapp.services; import com.savvato.tribeapp.controllers.dto.UserRequest; +import com.savvato.tribeapp.dto.UsernameDTO; import com.savvato.tribeapp.entities.*; import java.util.HashSet; @@ -84,6 +85,22 @@ public User getUser2() { return rtn; } + public UsernameDTO getUsernameDTOForUserID(Long userId) { + if (userId == USER1_ID) { + return UsernameDTO.builder() + .userId(USER1_ID) + .username(USER1_NAME) + .build(); + } else if (userId == USER2_ID) { + return UsernameDTO.builder() + .userId(USER2_ID) + .username(USER2_NAME) + .build(); + } else { + return null; + } + } + public UserRequest getUserRequestFor(User user) { UserRequest rtn = new UserRequest(); diff --git a/src/test/java/com/savvato/tribeapp/services/ConnectServiceImplTest.java b/src/test/java/com/savvato/tribeapp/services/ConnectServiceImplTest.java index d305a82d..eefbc8dd 100644 --- a/src/test/java/com/savvato/tribeapp/services/ConnectServiceImplTest.java +++ b/src/test/java/com/savvato/tribeapp/services/ConnectServiceImplTest.java @@ -155,8 +155,8 @@ public void connectWhenQrCodeIsInvalid() { @Test public void connectWhenQrCodeIsValid() { UserPrincipal user = new UserPrincipal(getUser1()); - Long requestingUserId = 1L; - Long toBeConnectedWithUserId = 2L; + Long requestingUserId = USER1_ID; + Long toBeConnectedWithUserId = USER2_ID; String connectionIntent = ""; String expectedDestination = "/connect/user/queue/specific-user"; ConnectIncomingMessageDTO incoming = ConnectIncomingMessageDTO.builder() @@ -167,7 +167,7 @@ public void connectWhenQrCodeIsValid() { List outgoing = new ArrayList<>(); outgoing.add(ConnectOutgoingMessageDTO.builder() .message("Please confirm that you wish to connect.") - .to(toBeConnectedWithUserId) + .to(getUsernameDTOForUserID(toBeConnectedWithUserId)) .build()); ConnectService connectServiceSpy = spy(connectService); doReturn(true).when(connectServiceSpy).validateQRCode(Mockito.any(), Mockito.any()); @@ -194,15 +194,16 @@ public void connectWhenQrCodeIsValid() { @Test public void handleConnectionIntentWhenNoConnectionIntent() { - Long requestingUserId = 1L; - Long toBeConnectedWithUserId = 2L; + Long requestingUserId = USER1_ID; + Long toBeConnectedWithUserId = USER2_ID; String connectionIntent = ""; List expectedOutgoingMsg = new ArrayList<>(); expectedOutgoingMsg.add(ConnectOutgoingMessageDTO.builder() .message("Please confirm that you wish to connect.") - .to(toBeConnectedWithUserId) + .to(getUsernameDTOForUserID(toBeConnectedWithUserId)) .build()); ConnectService connectServiceSpy = spy(connectService); + Mockito.when(userRepository.findById(Mockito.any())).thenReturn(Optional.of(getUser2())); List outgoing = connectServiceSpy.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId); verify(connectServiceSpy, never()).saveConnectionDetails(Mockito.any(), Mockito.any()); @@ -212,20 +213,21 @@ public void handleConnectionIntentWhenNoConnectionIntent() { @Test public void handleConnectionIntentWhenConnectionIntentConfirmedAndDatabaseSaveSuccessful() { - Long requestingUserId = 1L; - Long toBeConnectedWithUserId = 2L; + Long requestingUserId = USER1_ID; + Long toBeConnectedWithUserId = USER2_ID; String connectionIntent = "confirmed"; ArrayList recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId)); List expectedOutgoingMsg = new ArrayList<>(); for(Long id : recipients) { expectedOutgoingMsg.add(ConnectOutgoingMessageDTO.builder() .connectionSuccess(true) - .to(id) + .to(getUsernameDTOForUserID(id)) .message("Successfully saved connection!") .build()); } Connection connection = new Connection(requestingUserId, toBeConnectedWithUserId); Mockito.when(connectionsRepository.save(Mockito.any())).thenReturn(connection); + Mockito.when(userRepository.findById(Mockito.any())).thenReturn(Optional.of(getUser1())).thenReturn(Optional.of(getUser2())); List outgoing = connectService.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId); ArgumentCaptor connectionArg = ArgumentCaptor.forClass(Connection.class); @@ -237,20 +239,21 @@ public void handleConnectionIntentWhenConnectionIntentConfirmedAndDatabaseSaveSu @Test public void handleConnectionIntentWhenConnectionIntentConfirmedAndDatabaseSaveUnsuccessful() throws Exception { - Long requestingUserId = 1L; - Long toBeConnectedWithUserId = 2L; + Long requestingUserId = USER1_ID; + Long toBeConnectedWithUserId = USER2_ID; String connectionIntent = "confirmed"; ArrayList recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId)); List expectedOutgoingMsg = new ArrayList<>(); for(Long id : recipients) { expectedOutgoingMsg.add(ConnectOutgoingMessageDTO.builder() .connectionError(true) - .to(id) + .to(getUsernameDTOForUserID(id)) .message("Failed to save connection to database.") .build()); } Mockito.when(connectionsRepository.save(Mockito.any())).thenThrow(new NullPointerException("Something went wrong.")); + Mockito.when(userRepository.findById(Mockito.any())).thenReturn(Optional.of(getUser1())).thenReturn(Optional.of(getUser2())); List outgoing = connectService.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId); ArgumentCaptor connectionArg = ArgumentCaptor.forClass(Connection.class); @@ -262,19 +265,20 @@ public void handleConnectionIntentWhenConnectionIntentConfirmedAndDatabaseSaveUn @Test public void handleConnectionIntentWhenConnectionIntentDenied() { - Long requestingUserId = 1L; - Long toBeConnectedWithUserId = 2L; + Long requestingUserId = USER1_ID; + Long toBeConnectedWithUserId = USER2_ID; String connectionIntent = "denied"; ArrayList recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId)); List expectedOutgoingMsg = new ArrayList<>(); for(Long id : recipients) { expectedOutgoingMsg.add(ConnectOutgoingMessageDTO.builder() .connectionError(true) - .to(id) + .to(getUsernameDTOForUserID(id)) .message("Connection request denied.") .build()); } ConnectService connectServiceSpy = spy(connectService); + Mockito.when(userRepository.findById(Mockito.any())).thenReturn(Optional.of(getUser1())).thenReturn(Optional.of(getUser2())); List outgoing = connectServiceSpy.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId); verify(connectServiceSpy, never()).saveConnectionDetails(Mockito.any(), Mockito.any()); @@ -343,11 +347,12 @@ public void testGetAllConnectionsForAUserWhenConnectionsExist() { List expectedOutgoingMessageDTOS = new ArrayList<>(); ConnectOutgoingMessageDTO outgoingMessage = ConnectOutgoingMessageDTO.builder() .connectionSuccess(true) - .to(connection.getRequestingUserId()) + .to(getUsernameDTOForUserID(connection.getRequestingUserId())) .message("") .build(); expectedOutgoingMessageDTOS.add(outgoingMessage); + Mockito.when(userRepository.findById(Mockito.any())).thenReturn(Optional.of(getUser1())).thenReturn(Optional.of(getUser2())); List actualMessageDTOs = connectService.getAllConnectionsForAUser(toBeConnectedUserId); assertThat(actualMessageDTOs).usingRecursiveComparison().isEqualTo(expectedOutgoingMessageDTOS);