RED-3584 / RED-3581 - notification issues - preferences validation test
This commit is contained in:
parent
356b15c837
commit
37a84d9049
@ -37,7 +37,7 @@ public class NotificationPersistenceService {
|
||||
notification.setCreationDate(OffsetDateTime.now());
|
||||
|
||||
var notificationPreferences = notificationPreferencesPersistenceService.getOrCreateNotificationPreferences(addNotificationRequest.getUserId());
|
||||
if (!notificationPreferences.isInAppNotificationsEnabled() || notificationPreferences.getInAppNotifications().contains(notification.getNotificationType())) {
|
||||
if (!notificationPreferences.isInAppNotificationsEnabled() || !notificationPreferences.getInAppNotifications().contains(notification.getNotificationType())) {
|
||||
notification.setSoftDeleted(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
|
||||
@ -29,17 +29,20 @@ public class NotificationPreferencesPersistenceService {
|
||||
public void setNotificationPreference(String userId, NotificationPreferences newNotificationPreferences) {
|
||||
notificationPreferencesRepository.findById(userId)
|
||||
.ifPresentOrElse(oldNotificationPreferences -> {
|
||||
BeanUtils.copyProperties(newNotificationPreferences, oldNotificationPreferences);
|
||||
|
||||
// if we disabled the notification preferences just now
|
||||
if (oldNotificationPreferences.isInAppNotificationsEnabled() && !newNotificationPreferences.isInAppNotificationsEnabled()) {
|
||||
if (oldNotificationPreferences.isInAppNotificationsEnabled() != newNotificationPreferences.isInAppNotificationsEnabled()) {
|
||||
notificationRepository.deleteAllByUserId(userId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
var removedNotificationTypes = new ArrayList<>(oldNotificationPreferences.getInAppNotifications());
|
||||
removedNotificationTypes.removeAll(newNotificationPreferences.getInAppNotifications());
|
||||
|
||||
notificationRepository.deleteAllByUserIdAndNotificationTypeIn(userId, removedNotificationTypes, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
if(!removedNotificationTypes.isEmpty()) {
|
||||
notificationRepository.deleteAllByUserIdAndNotificationTypeIn(userId, removedNotificationTypes, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
BeanUtils.copyProperties(newNotificationPreferences, oldNotificationPreferences);
|
||||
|
||||
}, () -> {
|
||||
NotificationPreferencesEntity notificationPreferencesEntity = new NotificationPreferencesEntity();
|
||||
|
||||
@ -13,23 +13,17 @@ public interface NotificationRepository extends JpaRepository<NotificationEntity
|
||||
|
||||
|
||||
@Query("select count(n) from NotificationEntity n where " +
|
||||
" ( " +
|
||||
" (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " +
|
||||
" ) " +
|
||||
" and n.softDeleted is null and n.userId = :userId and n.creationDate > :since")
|
||||
int hasInAppNotificationForUser(String userId, OffsetDateTime since);
|
||||
|
||||
@Query("select n from NotificationEntity n where " +
|
||||
" ( " +
|
||||
" (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " +
|
||||
" ) " +
|
||||
" and n.softDeleted is null and n.userId = :userId order by n.creationDate desc")
|
||||
List<NotificationEntity> findAppNotificationsForUser(String userId);
|
||||
|
||||
@Query("select n from NotificationEntity n where " +
|
||||
" ( " +
|
||||
" (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.inAppNotifications apn where p.userId = :userId and p.inAppNotificationsEnabled = true )) " +
|
||||
" ) " +
|
||||
" and n.seenDate is null and n.softDeleted is null and n.userId = :userId order by n.creationDate desc ")
|
||||
List<NotificationEntity> findUnseenNotificationsForUser(String userId);
|
||||
|
||||
@ -56,9 +50,7 @@ public interface NotificationRepository extends JpaRepository<NotificationEntity
|
||||
|
||||
|
||||
@Query("select n from NotificationEntity n where " +
|
||||
" ( " +
|
||||
" (exists (select e from NotificationPreferencesEntity e where e.userId = :userId) and n.notificationType in ( select apn from NotificationPreferencesEntity p join p.emailNotifications apn where p.userId = :userId and p.emailNotificationsEnabled = true )) " +
|
||||
" ) " +
|
||||
" and n.userId = :userId and n.creationDate :from and n.creationDate <= :to order by n.creationDate desc")
|
||||
" and n.userId = :userId and n.creationDate >= :from and n.creationDate <= :to order by n.creationDate desc")
|
||||
List<NotificationEntity> findEmailNotificationsForUserId(String userId, OffsetDateTime from, OffsetDateTime to);
|
||||
}
|
||||
|
||||
@ -65,6 +65,20 @@ public class ReanalysisRequiredStatusService {
|
||||
Map<String, Long> dossierVersionMap,
|
||||
Map<String, DossierEntity> dossierMap) {
|
||||
|
||||
// enhance with dossierTemplateId
|
||||
DossierEntity dossier;
|
||||
try {
|
||||
dossier = dossierMap.computeIfAbsent(fileStatus.getDossierId(), k -> dossierPersistenceService.getAndValidateDossier(fileStatus.getDossierId()));
|
||||
} catch (DossierNotFoundException e) {
|
||||
log.info("Dossier {} was not found, thus analysis is not required", fileStatus.getDossierId());
|
||||
return new AnalysisRequiredResult(false, false);
|
||||
}
|
||||
|
||||
fileStatus.setDossierArchived(dossier.getArchivedTime() != null);
|
||||
fileStatus.setDossierTemplateId(dossier.getDossierTemplateId());
|
||||
fileStatus.setDossierStatusId(dossier.getDossierStatusId());
|
||||
|
||||
|
||||
if (ProcessingStatus.ERROR.equals(fileStatus.getProcessingStatus()) && !ignoreProcessingStates) {
|
||||
return new AnalysisRequiredResult(false, true);
|
||||
}
|
||||
@ -83,7 +97,7 @@ public class ReanalysisRequiredStatusService {
|
||||
if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) {
|
||||
return new AnalysisRequiredResult(true, false);
|
||||
} else {
|
||||
return requiresReanalysisBasedOnVersionDifference(fileStatus, dossierTemplateVersionMap, dossierVersionMap, dossierMap);
|
||||
return requiresReanalysisBasedOnVersionDifference(fileStatus, dossier, dossierTemplateVersionMap, dossierVersionMap);
|
||||
}
|
||||
default:
|
||||
return new AnalysisRequiredResult(false, false);
|
||||
@ -94,22 +108,10 @@ public class ReanalysisRequiredStatusService {
|
||||
}
|
||||
|
||||
private AnalysisRequiredResult requiresReanalysisBasedOnVersionDifference(FileModel fileStatus,
|
||||
DossierEntity dossier,
|
||||
Map<String, Map<VersionType, Long>> dossierTemplateVersionMap,
|
||||
Map<String, Long> dossierVersionMap,
|
||||
Map<String, DossierEntity> dossierMap) {
|
||||
Map<String, Long> dossierVersionMap) {
|
||||
|
||||
// enhance with dossierTemplateId
|
||||
DossierEntity dossier;
|
||||
try {
|
||||
dossier = dossierMap.computeIfAbsent(fileStatus.getDossierId(), k -> dossierPersistenceService.getAndValidateDossier(fileStatus.getDossierId()));
|
||||
} catch (DossierNotFoundException e) {
|
||||
log.info("Dossier {} was not found, thus analysis is not required", fileStatus.getDossierId());
|
||||
return new AnalysisRequiredResult(false, false);
|
||||
}
|
||||
|
||||
fileStatus.setDossierArchived(dossier.getArchivedTime() != null);
|
||||
fileStatus.setDossierTemplateId(dossier.getDossierTemplateId());
|
||||
fileStatus.setDossierStatusId(dossier.getDossierStatusId());
|
||||
|
||||
// get relevant versions
|
||||
var dossierTemplateVersions = dossierTemplateVersionMap.computeIfAbsent(dossier.getDossierTemplateId(),
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.NotificationClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.NotificationPreferencesClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.audit.AddNotificationRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.notification.Notification;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.notification.NotificationType;
|
||||
import org.assertj.core.util.Lists;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -19,10 +21,50 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest {
|
||||
@Autowired
|
||||
private NotificationClient notificationClient;
|
||||
|
||||
@Autowired
|
||||
private NotificationPreferencesClient notificationPreferencesClient;
|
||||
|
||||
|
||||
@Test
|
||||
public void testNotificationPreferences() {
|
||||
// initialize in app notifications
|
||||
var preferences = notificationPreferencesClient.getNotificationPreferences("1");
|
||||
|
||||
notificationClient.addNotification(AddNotificationRequest.builder()
|
||||
.notificationType(NotificationType.ASSIGN_REVIEWER.name())
|
||||
.userId("1").build());
|
||||
|
||||
assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(1);
|
||||
|
||||
|
||||
// disable in app notifications
|
||||
preferences.setInAppNotificationsEnabled(false);
|
||||
notificationPreferencesClient.setNotificationPreferences("1", preferences);
|
||||
assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0);
|
||||
|
||||
// re-enable in app notifications
|
||||
preferences.setInAppNotificationsEnabled(true);
|
||||
notificationPreferencesClient.setNotificationPreferences("1", preferences);
|
||||
assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0);
|
||||
|
||||
|
||||
notificationClient.addNotification(AddNotificationRequest.builder()
|
||||
.notificationType(NotificationType.ASSIGN_REVIEWER.name())
|
||||
.userId("1").build());
|
||||
assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(1);
|
||||
|
||||
|
||||
preferences.getInAppNotifications().remove(NotificationType.ASSIGN_REVIEWER.name());
|
||||
notificationPreferencesClient.setNotificationPreferences("1", preferences);
|
||||
assertThat(notificationClient.getNotifications("1", true).size()).isEqualTo(0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNotification() {
|
||||
|
||||
notificationClient.addNotification(AddNotificationRequest.builder().notificationType("test").issuerId("1").userId("1").target(Map.of("test", "test")).build());
|
||||
notificationClient.addNotification(AddNotificationRequest.builder().notificationType(NotificationType.ASSIGN_REVIEWER.name()).issuerId("1").userId("1").target(Map.of("test", "test")).build());
|
||||
|
||||
var notification = getNotification();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user