[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.FutureUtils;
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.database.*;
import dev.sheldan.abstracto.experience.model.template.UserSyncStatusModel;
@@ -529,13 +530,15 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
@Override
public LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer) {
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;
if(aUserExperience != null) {
LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(aUserExperience);
if(rankOfUserInServer != null) {
rank = rankOfUserInServer.getRank();
}
AUserExperience aUserExperience = aUserExperienceOptional.get();
LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(aUserExperience);
if(rankOfUserInServer != null) {
rank = rankOfUserInServer.getRank();
}
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.UserInServerManagementService;
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.database.AExperienceLevel;
import dev.sheldan.abstracto.experience.model.database.AExperienceRole;
@@ -661,7 +662,8 @@ public class AUserExperienceServiceBeanTest {
int rank = 1;
AUserExperience experienceObj = Mockito.mock(AUserExperience.class);
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);
when(leaderBoardEntryTest.getRank()).thenReturn(rank);
when(userExperienceManagementService.getRankOfUserInServer(experienceObj)).thenReturn(leaderBoardEntryTest);
@@ -670,20 +672,20 @@ public class AUserExperienceServiceBeanTest {
Assert.assertEquals(rank, rankOfUserInServer.getRank().intValue());
}
@Test
public void testGetRankForUserNotExisting() {
@Test(expected = NoExperienceTrackedException.class)
public void testGetRankForUserNoExperienceFound() {
when(aUserInAServer.getUserInServerId()).thenReturn(USER_IN_SERVER_ID);
when(aUserInAServer.getUserReference()).thenReturn(user);
when(userExperienceManagementService.findUserInServer(aUserInAServer)).thenReturn(null);
LeaderBoardEntry rankOfUserInServer = testUnit.getRankOfUserInServer(aUserInAServer);
Assert.assertNull(rankOfUserInServer.getExperience());
Assert.assertEquals(0, rankOfUserInServer.getRank().intValue());
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.empty());
testUnit.getRankOfUserInServer(aUserInAServer);
}
@Test
public void testGetRankWhenRankReturnsNull() {
AUserExperience experienceObj = Mockito.mock(AUserExperience.class);
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);
LeaderBoardEntry rankOfUserInServer = testUnit.getRankOfUserInServer(aUserInAServer);
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();
}
}