mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-05-15 12:42:47 +00:00
[AB-250] showing nicer exception in case there is no tracked experience yet
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user