[AB-250] showing nicer exception in case there is no tracked experience yet

This commit is contained in:
Sheldan
2021-05-02 01:26:39 +02:00
parent ad15538b67
commit 23dd02312a
3 changed files with 35 additions and 14 deletions

View File

@@ -13,6 +13,7 @@ import dev.sheldan.abstracto.core.service.management.UserInServerManagementServi
import dev.sheldan.abstracto.core.utils.CompletableFutureList; import dev.sheldan.abstracto.core.utils.CompletableFutureList;
import dev.sheldan.abstracto.core.utils.FutureUtils; import dev.sheldan.abstracto.core.utils.FutureUtils;
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig; import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
import dev.sheldan.abstracto.experience.exception.NoExperienceTrackedException;
import dev.sheldan.abstracto.experience.model.*; import dev.sheldan.abstracto.experience.model.*;
import dev.sheldan.abstracto.experience.model.database.*; import dev.sheldan.abstracto.experience.model.database.*;
import dev.sheldan.abstracto.experience.model.template.UserSyncStatusModel; import dev.sheldan.abstracto.experience.model.template.UserSyncStatusModel;
@@ -529,13 +530,15 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
@Override @Override
public LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer) { public LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer) {
log.debug("Retrieving rank for {}", userInAServer.getUserReference().getId()); log.debug("Retrieving rank for {}", userInAServer.getUserReference().getId());
AUserExperience aUserExperience = userExperienceManagementService.findUserInServer(userInAServer); Optional<AUserExperience> aUserExperienceOptional = userExperienceManagementService.findByUserInServerIdOptional(userInAServer.getUserInServerId());
if(!aUserExperienceOptional.isPresent()) {
throw new NoExperienceTrackedException();
}
Integer rank = 0; Integer rank = 0;
if(aUserExperience != null) { AUserExperience aUserExperience = aUserExperienceOptional.get();
LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(aUserExperience); LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(aUserExperience);
if(rankOfUserInServer != null) { if(rankOfUserInServer != null) {
rank = rankOfUserInServer.getRank(); rank = rankOfUserInServer.getRank();
}
} }
return LeaderBoardEntry.builder().experience(aUserExperience).rank(rank).build(); return LeaderBoardEntry.builder().experience(aUserExperience).rank(rank).build();
} }

View File

@@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementServ
import dev.sheldan.abstracto.core.service.management.ServerManagementService; import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig; import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
import dev.sheldan.abstracto.experience.exception.NoExperienceTrackedException;
import dev.sheldan.abstracto.experience.model.*; import dev.sheldan.abstracto.experience.model.*;
import dev.sheldan.abstracto.experience.model.database.AExperienceLevel; import dev.sheldan.abstracto.experience.model.database.AExperienceLevel;
import dev.sheldan.abstracto.experience.model.database.AExperienceRole; import dev.sheldan.abstracto.experience.model.database.AExperienceRole;
@@ -661,7 +662,8 @@ public class AUserExperienceServiceBeanTest {
int rank = 1; int rank = 1;
AUserExperience experienceObj = Mockito.mock(AUserExperience.class); AUserExperience experienceObj = Mockito.mock(AUserExperience.class);
when(aUserInAServer.getUserReference()).thenReturn(user); when(aUserInAServer.getUserReference()).thenReturn(user);
when(userExperienceManagementService.findUserInServer(aUserInAServer)).thenReturn(experienceObj); when(aUserInAServer.getUserInServerId()).thenReturn(USER_IN_SERVER_ID);
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.of(experienceObj));
LeaderBoardEntryResult leaderBoardEntryTest = Mockito.mock(LeaderBoardEntryResult.class); LeaderBoardEntryResult leaderBoardEntryTest = Mockito.mock(LeaderBoardEntryResult.class);
when(leaderBoardEntryTest.getRank()).thenReturn(rank); when(leaderBoardEntryTest.getRank()).thenReturn(rank);
when(userExperienceManagementService.getRankOfUserInServer(experienceObj)).thenReturn(leaderBoardEntryTest); when(userExperienceManagementService.getRankOfUserInServer(experienceObj)).thenReturn(leaderBoardEntryTest);
@@ -670,20 +672,20 @@ public class AUserExperienceServiceBeanTest {
Assert.assertEquals(rank, rankOfUserInServer.getRank().intValue()); Assert.assertEquals(rank, rankOfUserInServer.getRank().intValue());
} }
@Test @Test(expected = NoExperienceTrackedException.class)
public void testGetRankForUserNotExisting() { public void testGetRankForUserNoExperienceFound() {
when(aUserInAServer.getUserInServerId()).thenReturn(USER_IN_SERVER_ID);
when(aUserInAServer.getUserReference()).thenReturn(user); when(aUserInAServer.getUserReference()).thenReturn(user);
when(userExperienceManagementService.findUserInServer(aUserInAServer)).thenReturn(null); when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.empty());
LeaderBoardEntry rankOfUserInServer = testUnit.getRankOfUserInServer(aUserInAServer); testUnit.getRankOfUserInServer(aUserInAServer);
Assert.assertNull(rankOfUserInServer.getExperience());
Assert.assertEquals(0, rankOfUserInServer.getRank().intValue());
} }
@Test @Test
public void testGetRankWhenRankReturnsNull() { public void testGetRankWhenRankReturnsNull() {
AUserExperience experienceObj = Mockito.mock(AUserExperience.class); AUserExperience experienceObj = Mockito.mock(AUserExperience.class);
when(aUserInAServer.getUserReference()).thenReturn(user); when(aUserInAServer.getUserReference()).thenReturn(user);
when(userExperienceManagementService.findUserInServer(aUserInAServer)).thenReturn(experienceObj); when(aUserInAServer.getUserInServerId()).thenReturn(USER_IN_SERVER_ID);
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.of(experienceObj));
when(userExperienceManagementService.getRankOfUserInServer(experienceObj)).thenReturn(null); when(userExperienceManagementService.getRankOfUserInServer(experienceObj)).thenReturn(null);
LeaderBoardEntry rankOfUserInServer = testUnit.getRankOfUserInServer(aUserInAServer); LeaderBoardEntry rankOfUserInServer = testUnit.getRankOfUserInServer(aUserInAServer);
Assert.assertEquals(experienceObj, rankOfUserInServer.getExperience()); Assert.assertEquals(experienceObj, rankOfUserInServer.getExperience());

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.experience.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class NoExperienceTrackedException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "no_experience_tracked_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}