diff --git a/src/main/java/com/chat/yourway/dto/response/TopicNotificationResponseDto.java b/src/main/java/com/chat/yourway/dto/response/TopicNotificationResponseDto.java index 5de5165d..744604f4 100644 --- a/src/main/java/com/chat/yourway/dto/response/TopicNotificationResponseDto.java +++ b/src/main/java/com/chat/yourway/dto/response/TopicNotificationResponseDto.java @@ -13,7 +13,7 @@ @ToString public class TopicNotificationResponseDto { - private TopicResponseDto topic; + private Integer topicId; private Integer unreadMessages; diff --git a/src/main/java/com/chat/yourway/listener/StompSubscriptionListener.java b/src/main/java/com/chat/yourway/listener/StompSubscriptionListener.java index bf0766cc..2b38f4e7 100644 --- a/src/main/java/com/chat/yourway/listener/StompSubscriptionListener.java +++ b/src/main/java/com/chat/yourway/listener/StompSubscriptionListener.java @@ -44,8 +44,11 @@ public void handleWebSocketSubscribeListener(SessionSubscribeEvent event) { if (isTopicDestination(destination)) { lastMessageDto = contactEventService.getByTopicIdAndEmail(getTopicId(event), email) .getLastMessage(); + int unreadMessages = contactEventService.getByTopicIdAndEmail(getTopicId(event), email) + .getUnreadMessages(); + var contactEvent = new ContactEvent(email, getTopicId(event), SUBSCRIBED, - getTimestamp(event), lastMessageDto); + getTimestamp(event), unreadMessages, lastMessageDto); contactEventService.updateEventTypeByEmail(ONLINE, email); contactEventService.save(contactEvent); } @@ -58,7 +61,7 @@ public void handleWebSocketSubscribeListener(SessionSubscribeEvent event) { } if (destination.equals(USER_DESTINATION + properties.getNotifyPrefix() + TOPICS_DESTINATION)) { - chatNotificationService.notifyAllPublicTopics(getEmail(event)); + chatNotificationService.notifyAllTopics(getEmail(event)); } log.info("Contact [{}] subscribe to [{}]", email, destination); @@ -72,7 +75,7 @@ public void handleWebSocketUnsubscribeListener(SessionUnsubscribeEvent event) { try { if (isTopicDestination(destination)) { var contactEvent = new ContactEvent(email, getTopicId(event), ONLINE, - getTimestamp(event), lastMessageDto); + getTimestamp(event), 0, lastMessageDto); contactEventService.save(contactEvent); } diff --git a/src/main/java/com/chat/yourway/mapper/MessageNotificationMapper.java b/src/main/java/com/chat/yourway/mapper/MessageNotificationMapper.java deleted file mode 100644 index 7a80c96e..00000000 --- a/src/main/java/com/chat/yourway/mapper/MessageNotificationMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.chat.yourway.mapper; - -import com.chat.yourway.dto.response.MessageNotificationResponseDto; -import com.chat.yourway.model.event.ContactEvent; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; - -@Mapper(componentModel = "spring") -public interface MessageNotificationMapper { - - @Mapping(target = "status", source = "eventType") - @Mapping(target = "lastRead", source = "timestamp") - @Mapping(target = "email", source = "email") - MessageNotificationResponseDto toNotificationResponseDto(ContactEvent event); - -} diff --git a/src/main/java/com/chat/yourway/mapper/NotificationMapper.java b/src/main/java/com/chat/yourway/mapper/NotificationMapper.java new file mode 100644 index 00000000..591a5454 --- /dev/null +++ b/src/main/java/com/chat/yourway/mapper/NotificationMapper.java @@ -0,0 +1,22 @@ +package com.chat.yourway.mapper; + +import com.chat.yourway.dto.response.MessageNotificationResponseDto; +import com.chat.yourway.dto.response.TopicNotificationResponseDto; +import com.chat.yourway.model.event.ContactEvent; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface NotificationMapper { + + @Mapping(target = "status", source = "eventType") + @Mapping(target = "lastRead", source = "timestamp") + @Mapping(target = "email", source = "email") + MessageNotificationResponseDto toMessageNotificationResponseDto(ContactEvent event); + + @Mapping(target = "topicId", source = "topicId") + @Mapping(target = "unreadMessages", source = "unreadMessages") + @Mapping(target = "lastMessage", source = "lastMessage") + TopicNotificationResponseDto toTopicNotificationResponseDto(ContactEvent event); + +} diff --git a/src/main/java/com/chat/yourway/model/event/ContactEvent.java b/src/main/java/com/chat/yourway/model/event/ContactEvent.java index e782d795..8f7e9f15 100644 --- a/src/main/java/com/chat/yourway/model/event/ContactEvent.java +++ b/src/main/java/com/chat/yourway/model/event/ContactEvent.java @@ -26,16 +26,18 @@ public class ContactEvent { private Integer topicId; private EventType eventType; private LocalDateTime timestamp; + private int unreadMessages; private LastMessageResponseDto lastMessage; public ContactEvent(String email, Integer topicId, EventType eventType, LocalDateTime timestamp, - LastMessageResponseDto lastMessage) { + int unreadMessages, LastMessageResponseDto lastMessage) { this.id = email + "_" + topicId; this.email = email; this.topicId = topicId; this.eventType = eventType; this.timestamp = timestamp; + this.unreadMessages = unreadMessages; this.lastMessage = lastMessage; } diff --git a/src/main/java/com/chat/yourway/service/ChatMessageServiceImpl.java b/src/main/java/com/chat/yourway/service/ChatMessageServiceImpl.java index 8191aee0..5fac88f1 100644 --- a/src/main/java/com/chat/yourway/service/ChatMessageServiceImpl.java +++ b/src/main/java/com/chat/yourway/service/ChatMessageServiceImpl.java @@ -69,16 +69,16 @@ public List sendMessageHistoryByTopicId(Integer topicId, private void sendToTopic(Integer topicId, MessageResponseDto messageDto) { var lastMessageDto = new LastMessageResponseDto(); - lastMessageDto.setTimestamp(messageDto.getTimestamp()); - lastMessageDto.setSentFrom(messageDto.getSentFrom()); - lastMessageDto.setLastMessage(messageDto.getContent()); + lastMessageDto.setTimestamp(messageDto.getTimestamp()); + lastMessageDto.setSentFrom(messageDto.getSentFrom()); + lastMessageDto.setLastMessage(messageDto.getContent()); - contactEventService.setLastMessageToAllTopicSubscribers(topicId, lastMessageDto); + contactEventService.updateMessageInfoForAllTopicSubscribers(topicId, lastMessageDto); simpMessagingTemplate.convertAndSend(toTopicDestination(topicId), messageDto); chatNotificationService.notifyTopicSubscribers(topicId); - chatNotificationService.notifyAllWhoSubscribedToTopic(topicId); + chatNotificationService.updateNotificationForAllWhoSubscribedToTopic(topicId); } private String toTopicDestination(Integer topicId) { diff --git a/src/main/java/com/chat/yourway/service/ChatNotificationServiceImpl.java b/src/main/java/com/chat/yourway/service/ChatNotificationServiceImpl.java index a3b5772b..c833f187 100644 --- a/src/main/java/com/chat/yourway/service/ChatNotificationServiceImpl.java +++ b/src/main/java/com/chat/yourway/service/ChatNotificationServiceImpl.java @@ -27,25 +27,57 @@ public void notifyTopicSubscribers(Integer topicId) { .forEach(n -> simpMessagingTemplate.convertAndSendToUser( n.getEmail(), toNotifyMessageDest(topicId), notifications)); - log.trace("All subscribers was notified by topic id = [{}]", topicId); + log.info("All subscribers was notified by topic id = [{}]", topicId); } @Override public void notifyAllWhoSubscribedToSameUserTopic(String userEmail) { + log.trace("Started notifyAllWhoSubscribedToSameUserTopic, user email = [{}]", userEmail); + contactEventService.getAllByEmail(userEmail) .forEach(e -> notifyTopicSubscribers(e.getTopicId())); + + log.info("All subscribers who subscribed to same topic was notified, email = [{}]", userEmail); } @Override - public void notifyAllPublicTopics(String email){ - var notifiedTopics = notificationService.notifyAllPublicTopicsByEmail(email); + public void notifyAllTopics(String email) { + log.trace("Started notifyAllTopics, email = [{}]", email); + + var notifiedTopics = notificationService.notifyAllTopicsByEmail(email); simpMessagingTemplate.convertAndSendToUser(email, toNotifyTopicsDest(), notifiedTopics); + + log.info("All topics was notified for user email = [{}]", email); } @Override public void notifyAllWhoSubscribedToTopic(Integer topicId) { + log.trace("Started notifyAllWhoSubscribedToTopic, topicId = [{}]", topicId); + + contactEventService.getAllByTopicId(topicId) + .forEach(e -> notifyAllTopics(e.getEmail())); + + log.info("All subscribed users was notified, topicId = [{}]", topicId); + } + + @Override + public void updateNotificationForAllTopics(String email) { + log.trace("Started updateNotificationForAllTopics, email = [{}]", email); + + var notifiedTopics = notificationService.updateTopicNotification(email); + simpMessagingTemplate.convertAndSendToUser(email, toNotifyTopicsDest(), notifiedTopics); + + log.info("All topics for user was notified, email = [{}]", email); + } + + @Override + public void updateNotificationForAllWhoSubscribedToTopic(Integer topicId) { + log.trace("Started updateNotificationForAllWhoSubscribedToTopic, topicId = [{}]", topicId); + contactEventService.getAllByTopicId(topicId) - .forEach(e -> notifyAllPublicTopics(e.getEmail())); + .forEach(e -> updateNotificationForAllTopics(e.getEmail())); + + log.info("Topic notifications was updated for all subscribed users, topicId = [{}]", topicId); } private String toNotifyMessageDest(Integer topicId) { diff --git a/src/main/java/com/chat/yourway/service/ContactEventServiceImpl.java b/src/main/java/com/chat/yourway/service/ContactEventServiceImpl.java index b742d8dc..aace67d0 100644 --- a/src/main/java/com/chat/yourway/service/ContactEventServiceImpl.java +++ b/src/main/java/com/chat/yourway/service/ContactEventServiceImpl.java @@ -1,6 +1,7 @@ package com.chat.yourway.service; import static com.chat.yourway.model.event.EventType.ONLINE; +import static com.chat.yourway.model.event.EventType.SUBSCRIBED; import com.chat.yourway.dto.response.LastMessageResponseDto; import com.chat.yourway.model.event.ContactEvent; @@ -31,7 +32,7 @@ public ContactEvent getByTopicIdAndEmail(Integer topicId, String email) { log.trace("Started getByTopicIdAndEmail, topicId [{}], email [{}]", topicId, email); return contactEventRedisRepository.findById(email + "_" + topicId) - .orElse(new ContactEvent(email, topicId, ONLINE, LocalDateTime.now(), null)); + .orElse(new ContactEvent(email, topicId, ONLINE, LocalDateTime.now(), 0, null)); } @Override @@ -62,15 +63,21 @@ public List getAllByTopicId(Integer topicId) { } @Override - public void setLastMessageToAllTopicSubscribers(Integer topicId, LastMessageResponseDto message) { - log.trace("Started setLastMessageToAllTopicSubscribers, topic id [{}], last message [{}]", + public void updateMessageInfoForAllTopicSubscribers(Integer topicId, + LastMessageResponseDto message) { + log.trace("Started updateMessageInfoForAllTopicSubscribers, topic id [{}], last message [{}]", topicId, message); List events = getAllByTopicId(topicId).stream() - .peek(e -> e.setLastMessage(message)) + .peek(e -> { + if (!e.getEventType().equals(SUBSCRIBED)) { + e.setUnreadMessages(e.getUnreadMessages() + 1); + } + e.setLastMessage(message); + }) .toList(); - log.trace("Last message [{}] was set to all topic id [{}] subscribers", message, topicId); + log.trace("Message info [{}] was updated for all topic id [{}] subscribers", message, topicId); contactEventRedisRepository.saveAll(events); } diff --git a/src/main/java/com/chat/yourway/service/NotificationServiceImpl.java b/src/main/java/com/chat/yourway/service/NotificationServiceImpl.java index f23060ad..6639f943 100644 --- a/src/main/java/com/chat/yourway/service/NotificationServiceImpl.java +++ b/src/main/java/com/chat/yourway/service/NotificationServiceImpl.java @@ -2,12 +2,11 @@ import com.chat.yourway.dto.response.MessageNotificationResponseDto; import com.chat.yourway.dto.response.TopicNotificationResponseDto; -import com.chat.yourway.mapper.MessageNotificationMapper; +import com.chat.yourway.mapper.NotificationMapper; import com.chat.yourway.model.event.ContactEvent; import com.chat.yourway.service.interfaces.ContactEventService; import com.chat.yourway.service.interfaces.MessageService; import com.chat.yourway.service.interfaces.NotificationService; -import com.chat.yourway.service.interfaces.TopicService; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,39 +18,40 @@ public class NotificationServiceImpl implements NotificationService { private final ContactEventService contactEventService; - private final TopicService topicService; private final MessageService messageService; - private final MessageNotificationMapper notificationMapper; + private final NotificationMapper notificationMapper; @Override public List notifyTopicSubscribers(Integer topicId) { log.trace("Started notifyTopicSubscribers by topic id [{}]", topicId); return contactEventService.getAllByTopicId(topicId).stream() - .map(notificationMapper::toNotificationResponseDto) + .map(notificationMapper::toMessageNotificationResponseDto) .toList(); } @Override - public List notifyAllPublicTopicsByEmail(String email) { - - return topicService.findAllPublic().stream() - .map(topic -> { - var event = contactEventService.getByTopicIdAndEmail(topic.getId(), email); - var topicNotificationDto = new TopicNotificationResponseDto(); - topicNotificationDto.setTopic(topic); - topicNotificationDto.setUnreadMessages(countUnreadMessages(event)); - topicNotificationDto.setLastMessage(event.getLastMessage()); - return topicNotificationDto; - }) + public List notifyAllTopicsByEmail(String email) { + + return contactEventService.getAllByEmail(email).stream() + .peek(this::countUnreadMessages) + .map(notificationMapper::toTopicNotificationResponseDto) + .toList(); + } + + @Override + public List updateTopicNotification(String email) { + return contactEventService.getAllByEmail(email).stream() + .map(notificationMapper::toTopicNotificationResponseDto) .toList(); } - private int countUnreadMessages(ContactEvent event) { - return messageService.countMessagesBetweenTimestampByTopicId( + private void countUnreadMessages(ContactEvent event) { + event.setUnreadMessages(messageService.countMessagesBetweenTimestampByTopicId( event.getTopicId(), event.getEmail(), - event.getTimestamp()); + event.getTimestamp())); + contactEventService.save(event); } } diff --git a/src/main/java/com/chat/yourway/service/interfaces/ChatNotificationService.java b/src/main/java/com/chat/yourway/service/interfaces/ChatNotificationService.java index aef3056a..d05ff51f 100644 --- a/src/main/java/com/chat/yourway/service/interfaces/ChatNotificationService.java +++ b/src/main/java/com/chat/yourway/service/interfaces/ChatNotificationService.java @@ -21,7 +21,7 @@ public interface ChatNotificationService { * * @param userEmail user email. */ - void notifyAllPublicTopics(String userEmail); + void notifyAllTopics(String userEmail); /** * Notify everyone who is subscribed to the same topic. @@ -30,4 +30,18 @@ public interface ChatNotificationService { */ void notifyAllWhoSubscribedToTopic(Integer topicId); + /** + * Update topic notification for user who subscribed to the same topic. + * + * @param topicId The id of the topic. + */ + void updateNotificationForAllWhoSubscribedToTopic(Integer topicId); + + /** + * Update notification for all topics. + * + * @param email user email. + */ + void updateNotificationForAllTopics(String email); + } diff --git a/src/main/java/com/chat/yourway/service/interfaces/ContactEventService.java b/src/main/java/com/chat/yourway/service/interfaces/ContactEventService.java index ae199c9f..69f225ff 100644 --- a/src/main/java/com/chat/yourway/service/interfaces/ContactEventService.java +++ b/src/main/java/com/chat/yourway/service/interfaces/ContactEventService.java @@ -47,6 +47,6 @@ public interface ContactEventService { * @param topicId topic id. * @param lastMessageDto last message Dto. */ - void setLastMessageToAllTopicSubscribers(Integer topicId, LastMessageResponseDto lastMessageDto); + void updateMessageInfoForAllTopicSubscribers(Integer topicId, LastMessageResponseDto lastMessageDto); } diff --git a/src/main/java/com/chat/yourway/service/interfaces/NotificationService.java b/src/main/java/com/chat/yourway/service/interfaces/NotificationService.java index a14ab271..b549bc63 100644 --- a/src/main/java/com/chat/yourway/service/interfaces/NotificationService.java +++ b/src/main/java/com/chat/yourway/service/interfaces/NotificationService.java @@ -15,11 +15,19 @@ public interface NotificationService { List notifyTopicSubscribers(Integer topicId); /** - * Retrieves a list of notifying all public topics. + * Retrieves a list of notifying all topics. * * @param email user email. - * @return A list of public topic's information. + * @return A list of topic's information. */ - List notifyAllPublicTopicsByEmail(String email); + List notifyAllTopicsByEmail(String email); + + /** + * Update info and return a list of notifying all topics. + * + * @param email user email. + * @return A list of topic's information. + */ + List updateTopicNotification(String email); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ecf8cbc5..5573639b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -16,7 +16,7 @@ spring.data.redis.password=${REDIS_PASSWORD:admin} #Hibernate spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect -#spring.jpa.show-sql=true +spring.jpa.show-sql=false spring.jpa.properties.hibernate.format_sql=true spring.jpa.hibernate.ddl-auto=validate diff --git a/src/test/java/com/chat/yourway/integration/controller/ChatControllerTest.java b/src/test/java/com/chat/yourway/integration/controller/ChatControllerTest.java index 86063ceb..6d2ab90f 100644 --- a/src/test/java/com/chat/yourway/integration/controller/ChatControllerTest.java +++ b/src/test/java/com/chat/yourway/integration/controller/ChatControllerTest.java @@ -202,7 +202,7 @@ void notifyTopicSubscribers_shouldNotifyTopicSubscribersIfSubscribeEvent() { lastMessageDto.setSentFrom("vasil@gmail.com"); lastMessageDto.setLastMessage("Hi"); - var event = new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), + var event = new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), 0, lastMessageDto); saveContactEvent(event); //Stored subscription results for testing @@ -233,7 +233,7 @@ void notifyTopicSubscribers_shouldNotifyTopicSubscribersIfAnyContactSubscribedTo lastMessageDto.setSentFrom("vasil@gmail.com"); lastMessageDto.setLastMessage("Hi"); - var event = new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), + var event = new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), 0, lastMessageDto); saveContactEvent(event); //Stored subscription results for testing diff --git a/src/test/java/com/chat/yourway/unit/service/impl/ContactEventServiceImplTest.java b/src/test/java/com/chat/yourway/unit/service/impl/ContactEventServiceImplTest.java index da8fb7b5..7c263f01 100644 --- a/src/test/java/com/chat/yourway/unit/service/impl/ContactEventServiceImplTest.java +++ b/src/test/java/com/chat/yourway/unit/service/impl/ContactEventServiceImplTest.java @@ -41,7 +41,8 @@ void save_shouldSaveToRepository() { // Given String email = "vasil@gmail.com"; int topicId = 1; - ContactEvent contactEvent = new ContactEvent(email, topicId, ONLINE, LocalDateTime.now(), null); + ContactEvent contactEvent = new ContactEvent(email, topicId, ONLINE, LocalDateTime.now(), 0, + null); // When contactEventService.save(contactEvent); @@ -56,7 +57,8 @@ void getByTopicIdAndEmail_shouldReturnContactEventFromRepository() { // Given Integer topicId = 1; String email = "vasil@gmail.com"; - ContactEvent expectedContactEvent = new ContactEvent(email, topicId, ONLINE, LocalDateTime.now(), null); + ContactEvent expectedContactEvent = new ContactEvent(email, topicId, ONLINE, + LocalDateTime.now(), 0, null); when(contactEventRedisRepository.findById(email + "_" + topicId)) .thenReturn(Optional.of(expectedContactEvent)); @@ -91,8 +93,8 @@ void getAllByEmail_shouldReturnContactEventsFromRepository() { // Given String email = "vasil@gmail.com"; List expectedContactEvents = Arrays.asList( - new ContactEvent(email, 1, ONLINE, LocalDateTime.now(), null), - new ContactEvent(email, 2, OFFLINE, LocalDateTime.now(), null) + new ContactEvent(email, 1, ONLINE, LocalDateTime.now(), 0, null), + new ContactEvent(email, 2, OFFLINE, LocalDateTime.now(), 0, null) ); when(contactEventRedisRepository.findAllByEmail(email)).thenReturn(expectedContactEvents); @@ -110,8 +112,8 @@ void updateEventTypeByEmail_shouldUpdateEventTypesInRepository() { String email = "vasil@gmail.com"; EventType newEventType = OFFLINE; List events = Arrays.asList( - new ContactEvent(email, 1, ONLINE, LocalDateTime.now(), null), - new ContactEvent(email, 2, ONLINE, LocalDateTime.now(), null) + new ContactEvent(email, 1, ONLINE, LocalDateTime.now(), 0, null), + new ContactEvent(email, 2, ONLINE, LocalDateTime.now(), 0, null) ); when(contactEventRedisRepository.findAllByEmail(email)).thenReturn(events); @@ -129,8 +131,8 @@ void getAllByTopicId_shouldReturnContactEventsFromRepository() { // Given Integer topicId = 1; List expectedContactEvents = Arrays.asList( - new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), null), - new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), null) + new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), 0, null), + new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), 0, null) ); when(contactEventRedisRepository.findAllByTopicId(topicId)).thenReturn(expectedContactEvents); @@ -152,13 +154,13 @@ void setLastMessageToAllTopicSubscribers_shouldUpdateLastMessagesInRepository() lastMessageDto.setLastMessage("New message"); List events = Arrays.asList( - new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), null), - new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), null) + new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), 0, null), + new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), 0, null) ); when(contactEventRedisRepository.findAllByTopicId(topicId)).thenReturn(events); // When - contactEventService.setLastMessageToAllTopicSubscribers(topicId, lastMessageDto); + contactEventService.updateMessageInfoForAllTopicSubscribers(topicId, lastMessageDto); // Then events.forEach(e -> e.setLastMessage(lastMessageDto)); diff --git a/src/test/java/com/chat/yourway/unit/service/impl/NotificationServiceImplTest.java b/src/test/java/com/chat/yourway/unit/service/impl/NotificationServiceImplTest.java index dde09bcd..ab82a331 100644 --- a/src/test/java/com/chat/yourway/unit/service/impl/NotificationServiceImplTest.java +++ b/src/test/java/com/chat/yourway/unit/service/impl/NotificationServiceImplTest.java @@ -10,7 +10,7 @@ import com.chat.yourway.dto.response.LastMessageResponseDto; import com.chat.yourway.dto.response.MessageNotificationResponseDto; -import com.chat.yourway.mapper.MessageNotificationMapper; +import com.chat.yourway.mapper.NotificationMapper; import com.chat.yourway.model.event.ContactEvent; import com.chat.yourway.service.NotificationServiceImpl; import com.chat.yourway.service.interfaces.ContactEventService; @@ -31,7 +31,7 @@ class NotificationServiceImplTest { private ContactEventService contactEventService; @Mock - private MessageNotificationMapper notificationMapper; + private NotificationMapper notificationMapper; @InjectMocks private NotificationServiceImpl notificationService; @@ -47,8 +47,8 @@ void notifyTopicSubscribers_shouldReturnListOfNotifications() { lastMessageDto.setLastMessage("Hello"); List events = Arrays.asList( - new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), lastMessageDto), - new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), lastMessageDto) + new ContactEvent("vasil@gmail.com", topicId, ONLINE, LocalDateTime.now(), 0, lastMessageDto), + new ContactEvent("anton@gmail.com", topicId, OFFLINE, LocalDateTime.now(), 0, lastMessageDto) ); var expectedNotifications = events.stream() @@ -63,7 +63,7 @@ void notifyTopicSubscribers_shouldReturnListOfNotifications() { .toList(); when(contactEventService.getAllByTopicId(topicId)).thenReturn(events); - when(notificationMapper.toNotificationResponseDto(any())) + when(notificationMapper.toMessageNotificationResponseDto(any())) .thenReturn(expectedNotifications.get(0), expectedNotifications.get(1)); // When @@ -72,7 +72,7 @@ void notifyTopicSubscribers_shouldReturnListOfNotifications() { // Then assertEquals(expectedNotifications, result, "Should return the expected list of notifications"); - verify(notificationMapper, times(2)).toNotificationResponseDto(any()); + verify(notificationMapper, times(2)).toMessageNotificationResponseDto(any()); } }