Skip to content

Commit

Permalink
TRIB-102, return the username along with the user ID in connectOutgoi…
Browse files Browse the repository at this point in the history
…ngMessageDTO (#165)

* Return the username and user ID instead of just the ID in ConnectOutgoingMessageDTO

* Updating tests to use the UsernameDTO in their test responses

* Fixed a bug, which used the requestingUserId instead of the toBeConnectedWithUserId.
  • Loading branch information
haxwell authored Mar 20, 2024
1 parent 015fde1 commit 189a0d2
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ public class ConnectOutgoingMessageDTO {

public String message;

public Long to;
public UsernameDTO to;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -112,21 +113,32 @@ public List<ConnectOutgoingMessageDTO> 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());
}
Expand All @@ -135,7 +147,10 @@ public List<ConnectOutgoingMessageDTO> 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());
}
Expand All @@ -153,7 +168,10 @@ public List<ConnectOutgoingMessageDTO> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,10 @@ public void testGetConnectionsHappyPath() throws Exception {
.connectionError(null)
.connectionSuccess(true)
.message("")
.to(requestingUserId)
.to(UsernameDTO.builder()
.userId(requestingUserId)
.username("test")
.build())
.build();

List<ConnectOutgoingMessageDTO> expectedReturnDtoList = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -167,7 +167,7 @@ public void connectWhenQrCodeIsValid() {
List<ConnectOutgoingMessageDTO> 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());
Expand All @@ -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<ConnectOutgoingMessageDTO> 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<ConnectOutgoingMessageDTO> outgoing = connectServiceSpy.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId);

verify(connectServiceSpy, never()).saveConnectionDetails(Mockito.any(), Mockito.any());
Expand All @@ -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<Long> recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId));
List<ConnectOutgoingMessageDTO> 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<ConnectOutgoingMessageDTO> outgoing = connectService.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId);

ArgumentCaptor<Connection> connectionArg = ArgumentCaptor.forClass(Connection.class);
Expand All @@ -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<Long> recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId));
List<ConnectOutgoingMessageDTO> 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<ConnectOutgoingMessageDTO> outgoing = connectService.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId);

ArgumentCaptor<Connection> connectionArg = ArgumentCaptor.forClass(Connection.class);
Expand All @@ -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<Long> recipients = new ArrayList<>(Arrays.asList(requestingUserId, toBeConnectedWithUserId));
List<ConnectOutgoingMessageDTO> 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<ConnectOutgoingMessageDTO> outgoing = connectServiceSpy.handleConnectionIntent(connectionIntent, requestingUserId, toBeConnectedWithUserId);

verify(connectServiceSpy, never()).saveConnectionDetails(Mockito.any(), Mockito.any());
Expand Down Expand Up @@ -343,11 +347,12 @@ public void testGetAllConnectionsForAUserWhenConnectionsExist() {
List<ConnectOutgoingMessageDTO> 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<ConnectOutgoingMessageDTO> actualMessageDTOs = connectService.getAllConnectionsForAUser(toBeConnectedUserId);

assertThat(actualMessageDTOs).usingRecursiveComparison().isEqualTo(expectedOutgoingMessageDTOS);
Expand Down

0 comments on commit 189a0d2

Please sign in to comment.