mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-27 06:04:54 +00:00
[AB-139] changing the places at which there might be an uncached member object
fixing integer validator fixing syncing roles not working if the role did not change in the database fixing warn id being flipped fixing star stats model
This commit is contained in:
@@ -31,7 +31,7 @@ public class DeleteWarning extends AbstractConditionableCommand {
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
checkParameters(commandContext);
|
||||
Long warnId = (Long) commandContext.getParameters().getParameters().get(0);
|
||||
Optional<Warning> optional = warnManagementService.findById(warnId, commandContext.getGuild().getIdLong());
|
||||
Optional<Warning> optional = warnManagementService.findByIdOptional(warnId, commandContext.getGuild().getIdLong());
|
||||
optional.ifPresent(warning -> warnManagementService.deleteWarning(warning));
|
||||
return CommandResult.fromSuccess();
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
|
||||
import dev.sheldan.abstracto.moderation.converter.UserNotesConverter;
|
||||
import dev.sheldan.abstracto.moderation.models.database.UserNote;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.ListNotesModel;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.NoteEntryModel;
|
||||
import dev.sheldan.abstracto.moderation.service.management.UserNoteManagementService;
|
||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@@ -66,9 +67,12 @@ public class UserNotes extends AbstractConditionableCommand {
|
||||
} else {
|
||||
userNotes = userNoteManagementService.loadNotesForServer(commandContext.getUserInitiatedContext().getServer());
|
||||
}
|
||||
model.setUserNotes(userNotesConverter.fromNotes(userNotes));
|
||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInChannel(USER_NOTES_RESPONSE_TEMPLATE, model, commandContext.getChannel()))
|
||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
||||
CompletableFuture<List<NoteEntryModel>> listCompletableFuture = userNotesConverter.fromNotes(userNotes);
|
||||
return listCompletableFuture.thenCompose(noteEntryModels -> {
|
||||
model.setUserNotes(noteEntryModels);
|
||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInChannel(USER_NOTES_RESPONSE_TEMPLATE, model, commandContext.getChannel()))
|
||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,9 +22,11 @@ import dev.sheldan.abstracto.moderation.service.management.WarnManagementService
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class Warnings extends AbstractConditionableCommand {
|
||||
@@ -45,8 +47,11 @@ public class Warnings extends AbstractConditionableCommand {
|
||||
@Autowired
|
||||
private EventWaiter eventWaiter;
|
||||
|
||||
@Autowired
|
||||
private Warnings self;
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||
checkParameters(commandContext);
|
||||
List<Warning> warnsToDisplay;
|
||||
if(!commandContext.getParameters().getParameters().isEmpty()) {
|
||||
@@ -55,14 +60,21 @@ public class Warnings extends AbstractConditionableCommand {
|
||||
} else {
|
||||
warnsToDisplay = warnManagementService.getAllWarningsOfServer(commandContext.getUserInitiatedContext().getServer());
|
||||
}
|
||||
List<WarnEntry> warnEntries = warnEntryConverter.fromWarnings(warnsToDisplay);
|
||||
return warnEntryConverter.fromWarnings(warnsToDisplay).thenApply(warnEntries -> {
|
||||
self.renderWarnings(commandContext, warnEntries);
|
||||
return CommandResult.fromSuccess();
|
||||
});
|
||||
|
||||
WarningsModel model = (WarningsModel) ContextConverter.fromCommandContext(commandContext, WarningsModel.class);
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void renderWarnings(CommandContext commandContext, List<WarnEntry> warnEntries) {
|
||||
WarningsModel model = (WarningsModel) ContextConverter.slimFromCommandContext(commandContext, WarningsModel.class);
|
||||
model.setWarnings(warnEntries);
|
||||
|
||||
Paginator paginator = paginatorService.createPaginatorFromTemplate(WARNINGS_RESPONSE_TEMPLATE, model, eventWaiter);
|
||||
paginator.display(commandContext.getChannel());
|
||||
return CommandResult.fromSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,6 +86,7 @@ public class Warnings extends AbstractConditionableCommand {
|
||||
.name("warnings")
|
||||
.module(ModerationModule.MODERATION)
|
||||
.templated(true)
|
||||
.async(true)
|
||||
.causesReaction(true)
|
||||
.supportsEmbedException(true)
|
||||
.parameters(parameters)
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
package dev.sheldan.abstracto.moderation.converter;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUserInServer;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||
import dev.sheldan.abstracto.moderation.models.database.UserNote;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.NoteEntryModel;
|
||||
import dev.sheldan.abstracto.moderation.service.management.UserNoteManagementService;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class UserNotesConverter {
|
||||
@@ -19,18 +27,45 @@ public class UserNotesConverter {
|
||||
@Autowired
|
||||
private BotService botService;
|
||||
|
||||
public List<NoteEntryModel> fromNotes(List<UserNote> userNotes){
|
||||
List<NoteEntryModel> entryModels = new ArrayList<>();
|
||||
@Autowired
|
||||
private UserNotesConverter self;
|
||||
|
||||
@Autowired
|
||||
private UserNoteManagementService userNoteManagementService;
|
||||
|
||||
|
||||
public CompletableFuture<List<NoteEntryModel>> fromNotes(List<UserNote> userNotes){
|
||||
List<CompletableFuture<Member>> memberFutures = new ArrayList<>();
|
||||
HashMap<ServerSpecificId, CompletableFuture<Member>> noteMemberMap = new HashMap<>();
|
||||
userNotes.forEach(userNote -> {
|
||||
CompletableFuture<Member> memberFuture = botService.getMemberInServerAsync(userNote.getUser());
|
||||
memberFutures.add(memberFuture);
|
||||
noteMemberMap.put(userNote.getUserNoteId(), memberFuture);
|
||||
});
|
||||
if(userNotes.isEmpty()) {
|
||||
memberFutures.add(CompletableFuture.completedFuture(null));
|
||||
}
|
||||
|
||||
return FutureUtils.toSingleFutureGeneric(memberFutures).thenApply(aVoid ->
|
||||
self.loadFullNotes(noteMemberMap)
|
||||
);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<NoteEntryModel> loadFullNotes(Map<ServerSpecificId, CompletableFuture<Member>> futureHashMap) {
|
||||
List<NoteEntryModel> entryModels = new ArrayList<>();
|
||||
futureHashMap.keySet().forEach(serverSpecificId -> {
|
||||
Member member = futureHashMap.get(serverSpecificId).join();
|
||||
UserNote note = userNoteManagementService.loadNote(serverSpecificId.getId(), serverSpecificId.getServerId());
|
||||
FullUserInServer fullUser = FullUserInServer
|
||||
.builder()
|
||||
.member(botService.getMemberInServer(userNote.getUser()))
|
||||
.aUserInAServer(userNote.getUser())
|
||||
.member(member)
|
||||
.aUserInAServer(note.getUser())
|
||||
.build();
|
||||
NoteEntryModel entryModel = NoteEntryModel
|
||||
.builder()
|
||||
.note(note)
|
||||
.fullUser(fullUser)
|
||||
.note(userNote)
|
||||
.build();
|
||||
entryModels.add(entryModel);
|
||||
});
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
package dev.sheldan.abstracto.moderation.converter;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUserInServer;
|
||||
import dev.sheldan.abstracto.core.models.FutureMemberPair;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarnEntry;
|
||||
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@Component
|
||||
public class WarnEntryConverter {
|
||||
@@ -16,25 +26,56 @@ public class WarnEntryConverter {
|
||||
@Autowired
|
||||
private BotService botService;
|
||||
|
||||
public List<WarnEntry> fromWarnings(List<Warning> warnings) {
|
||||
List<WarnEntry> entries = new ArrayList<>();
|
||||
@Autowired
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private WarnManagementService warnManagementService;
|
||||
|
||||
@Autowired
|
||||
private WarnEntryConverter self;
|
||||
|
||||
public CompletableFuture<List<WarnEntry>> fromWarnings(List<Warning> warnings) {
|
||||
Map<ServerSpecificId, FutureMemberPair> loadedWarnings = new HashMap<>();
|
||||
List<CompletableFuture<Member>> allFutures = new ArrayList<>();
|
||||
// TODO maybe optimize to not need to look into the cache twice
|
||||
warnings.forEach(warning -> {
|
||||
CompletableFuture<Member> warningMemberFuture = botService.getMemberInServerAsync(warning.getWarningUser());
|
||||
CompletableFuture<Member> warnedMemberFuture = botService.getMemberInServerAsync(warning.getWarnedUser());
|
||||
FutureMemberPair futurePair = FutureMemberPair.builder().firstMember(warningMemberFuture).secondMember(warnedMemberFuture).build();
|
||||
loadedWarnings.put(warning.getWarnId(), futurePair);
|
||||
allFutures.add(warningMemberFuture);
|
||||
allFutures.add(warnedMemberFuture);
|
||||
});
|
||||
return FutureUtils.toSingleFutureGeneric(allFutures).thenApply(aVoid ->
|
||||
self.loadFullWarnEntries(loadedWarnings)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<WarnEntry> loadFullWarnEntries(Map<ServerSpecificId, FutureMemberPair> loadedWarnInfo) {
|
||||
List<WarnEntry> entries = new ArrayList<>();
|
||||
loadedWarnInfo.keySet().forEach(warning -> {
|
||||
FutureMemberPair memberPair = loadedWarnInfo.get(warning);
|
||||
Member warnedMember = memberPair.getSecondMember().join();
|
||||
FullUserInServer warnedUser = FullUserInServer
|
||||
.builder()
|
||||
.member(botService.getMemberInServer(warning.getWarnedUser()))
|
||||
.aUserInAServer(warning.getWarnedUser())
|
||||
.member(warnedMember)
|
||||
.aUserInAServer(userInServerManagementService.loadUser(warnedMember))
|
||||
.build();
|
||||
|
||||
Member warningMember = memberPair.getFirstMember().join();
|
||||
FullUserInServer warningUser = FullUserInServer
|
||||
.builder()
|
||||
.member(botService.getMemberInServer(warning.getWarningUser()))
|
||||
.aUserInAServer(warning.getWarningUser())
|
||||
.member(warningMember)
|
||||
.aUserInAServer(userInServerManagementService.loadUser(warningMember))
|
||||
.build();
|
||||
WarnEntry entry = WarnEntry
|
||||
.builder()
|
||||
.warnedUser(warnedUser)
|
||||
.warningUser(warningUser)
|
||||
.warning(warning)
|
||||
.warning(warnManagementService.findById(warning.getId(), warning.getServerId()))
|
||||
.build();
|
||||
entries.add(entry);
|
||||
});
|
||||
|
||||
@@ -20,8 +20,11 @@ public interface UserNoteRepository extends JpaRepository<UserNote, Long> {
|
||||
List<UserNote> findByUser_ServerReference(AServer server);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
boolean existsByUserNoteId_IdAndUserNoteId_ServerId(@NonNull Long aLong, Long serverId);
|
||||
boolean existsByUserNoteId_IdAndUserNoteId_ServerId(@NonNull Long userNoteId, Long serverId);
|
||||
|
||||
void deleteByUserNoteId_IdAndUserNoteId_ServerId(@NonNull Long aLong, Long serverId);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
UserNote findByUserNoteId_IdAndUserNoteId_ServerId(Long userNoteId, Long serverId);
|
||||
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ public class BanServiceBean implements BanService {
|
||||
}
|
||||
|
||||
private CompletableFuture<Void> banUser(Long guildId, Long userId, String reason) {
|
||||
Optional<Guild> guildByIdOptional = botService.getGuildById(guildId);
|
||||
Optional<Guild> guildByIdOptional = botService.getGuildByIdOptional(guildId);
|
||||
if(guildByIdOptional.isPresent()) {
|
||||
return banUser(guildByIdOptional.get(), userId, reason);
|
||||
} else {
|
||||
|
||||
@@ -39,6 +39,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -110,22 +111,6 @@ public class MuteServiceBean implements MuteService {
|
||||
return muteUserInServer(mutedUser, mutingUser, reason, unMuteDate, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> muteAUserInAServer(AUserInAServer userBeingMuted, AUserInAServer userMuting, String reason, Instant unMuteDate, ServerChannelMessage message) {
|
||||
FullUserInServer mutedUser = FullUserInServer
|
||||
.builder()
|
||||
.aUserInAServer(userBeingMuted)
|
||||
.member(botService.getMemberInServer(userBeingMuted))
|
||||
.build();
|
||||
|
||||
FullUserInServer mutingUser = FullUserInServer
|
||||
.builder()
|
||||
.aUserInAServer(userMuting)
|
||||
.member(botService.getMemberInServer(userMuting))
|
||||
.build();
|
||||
return muteUserInServer(mutedUser, mutingUser, reason, unMuteDate, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> muteUserInServer(FullUserInServer userBeingMuted, FullUserInServer userMuting, String reason, Instant unMuteDate, ServerChannelMessage message) {
|
||||
AServer serverBeingMutedIn = userBeingMuted.getAUserInAServer().getServerReference();
|
||||
@@ -251,7 +236,7 @@ public class MuteServiceBean implements MuteService {
|
||||
return FutureUtils.toSingleFutureGeneric(completableFutures);
|
||||
}
|
||||
|
||||
private CompletableFuture<Void> sendUnMuteLog(UnMuteLog muteLogModel) {
|
||||
private CompletableFuture<Void> sendUnMuteLogMessage(UnMuteLog muteLogModel) {
|
||||
log.trace("Sending unMute log to the mute posttarget.");
|
||||
MessageToSend message = templateService.renderEmbedTemplate(UN_MUTE_LOG_TEMPLATE, muteLogModel);
|
||||
List<CompletableFuture<Message>> completableFutures = postTargetService.sendEmbedInPostTarget(message, MutingPostTarget.MUTE_LOG, muteLogModel.getServer().getId());
|
||||
@@ -279,7 +264,7 @@ public class MuteServiceBean implements MuteService {
|
||||
log.info("UnMuting {} in server {}", mute.getMutedUser().getUserReference().getId(), mutingServer.getId());
|
||||
MuteRole muteRole = muteRoleManagementService.retrieveMuteRoleForServer(mutingServer);
|
||||
log.trace("Using the mute role {} mapping to role {}", muteRole.getId(), muteRole.getRole().getId());
|
||||
Guild guild = botService.getGuildByIdNullable(mutingServer.getId());
|
||||
Guild guild = botService.getGuildById(mutingServer.getId());
|
||||
CompletableFuture<Void> roleRemovalFuture;
|
||||
if(botService.isUserInGuild(guild, mute.getMutedUser())) {
|
||||
roleRemovalFuture = roleService.removeRoleFromUserFuture(mute.getMutedUser(), muteRole.getRole());
|
||||
@@ -287,24 +272,40 @@ public class MuteServiceBean implements MuteService {
|
||||
roleRemovalFuture = CompletableFuture.completedFuture(null);
|
||||
log.info("User to unMute left the guild.");
|
||||
}
|
||||
Long serverId = mutingServer.getId();
|
||||
CompletableFuture<Member> mutingMemberFuture = botService.getMemberInServerAsync(mute.getMutingUser());
|
||||
CompletableFuture<Member> mutedMemberFuture = botService.getMemberInServerAsync(mute.getMutedUser());
|
||||
CompletableFuture<Void> finalFuture = new CompletableFuture<>();
|
||||
CompletableFuture.allOf(mutingMemberFuture, mutedMemberFuture, roleRemovalFuture, mutingMemberFuture, mutedMemberFuture).handle((aVoid, throwable) -> {
|
||||
self.sendUnmuteLog(muteId, guild, mutingMemberFuture, mutedMemberFuture).thenAccept(aVoid1 ->
|
||||
finalFuture.complete(null)
|
||||
);
|
||||
return null;
|
||||
});
|
||||
|
||||
return finalFuture;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CompletionStage<Void> sendUnmuteLog(Long muteId, Guild guild, CompletableFuture<Member> mutingMemberFuture, CompletableFuture<Member> mutedMemberFuture) {
|
||||
Mute mute = muteManagementService.findMute(muteId, guild.getIdLong());
|
||||
AServer mutingServer = serverManagementService.loadServer(guild.getIdLong());
|
||||
UnMuteLog unMuteLog = UnMuteLog
|
||||
.builder()
|
||||
.mute(mute)
|
||||
.mutingUser(botService.getMemberInServer(mute.getMutingUser()))
|
||||
.unMutedUser(botService.getMemberInServer(mute.getMutedUser()))
|
||||
.mutingUser(mutingMemberFuture.join())
|
||||
.unMutedUser(mutedMemberFuture.join())
|
||||
.guild(guild)
|
||||
.server(mutingServer)
|
||||
.build();
|
||||
CompletableFuture<Void> notificationFuture = sendUnMuteLog(unMuteLog);
|
||||
return CompletableFuture.allOf(roleRemovalFuture, notificationFuture).thenAccept(aVoid ->
|
||||
self.endMuteInDatabase(muteId, serverId)
|
||||
CompletableFuture<Void> notificationFuture = sendUnMuteLogMessage(unMuteLog);
|
||||
return CompletableFuture.allOf(notificationFuture).thenAccept(aVoid ->
|
||||
self.endMuteInDatabase(muteId, guild.getIdLong())
|
||||
);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void endMuteInDatabase(Long muteId, Long serverId) {
|
||||
Optional<Mute> muteOptional = muteManagementService.findMute(muteId, serverId);
|
||||
Optional<Mute> muteOptional = muteManagementService.findMuteOptional(muteId, serverId);
|
||||
muteOptional.ifPresent(mute ->
|
||||
completelyUnMuteUser(mute.getMutedUser())
|
||||
);
|
||||
@@ -315,7 +316,7 @@ public class MuteServiceBean implements MuteService {
|
||||
@Transactional
|
||||
public CompletableFuture<Void> endMute(Long muteId, Long serverId) {
|
||||
log.info("UnMuting the mute {} in server {}", muteId, serverId);
|
||||
Optional<Mute> muteOptional = muteManagementService.findMute(muteId, serverId);
|
||||
Optional<Mute> muteOptional = muteManagementService.findMuteOptional(muteId, serverId);
|
||||
if(muteOptional.isPresent()) {
|
||||
return endMute(muteOptional.get());
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package dev.sheldan.abstracto.moderation.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FutureMemberPair;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.service.*;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
@@ -19,7 +21,6 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -27,9 +28,12 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@@ -120,7 +124,6 @@ public class WarnServiceBean implements WarnService {
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<Long> flattenWarnings(List<Warning> warningsToDecay) {
|
||||
List<Long> warningIds = new ArrayList<>();
|
||||
warningsToDecay.forEach(warning ->
|
||||
@@ -134,7 +137,7 @@ public class WarnServiceBean implements WarnService {
|
||||
Instant now = Instant.now();
|
||||
log.info("Decaying {} warnings.", warningIds.size());
|
||||
warningIds.forEach(warningId -> {
|
||||
Optional<Warning> warningOptional = warnManagementService.findById(warningId, serverId);
|
||||
Optional<Warning> warningOptional = warnManagementService.findByIdOptional(warningId, serverId);
|
||||
warningOptional.ifPresent(warning ->
|
||||
decayWarning(warning, now)
|
||||
);
|
||||
@@ -152,20 +155,47 @@ public class WarnServiceBean implements WarnService {
|
||||
}
|
||||
|
||||
private CompletableFuture<Void> logDecayedWarnings(AServer server, List<Warning> warningsToDecay) {
|
||||
log.trace("Logging decaying {} warnings in server {}.", warningsToDecay.size(), server.getId());
|
||||
List<WarnDecayWarning> warnDecayWarnings = new ArrayList<>();
|
||||
log.trace("Loading members decaying {} warnings in server {}.", warningsToDecay.size(), server.getId());
|
||||
HashMap<ServerSpecificId, FutureMemberPair> warningMembers = new HashMap<>();
|
||||
List<CompletableFuture<Member>> allFutures = new ArrayList<>();
|
||||
Long serverId = server.getId();
|
||||
warningsToDecay.forEach(warning -> {
|
||||
CompletableFuture<Member> warningMember = botService.getMemberInServerAsync(warning.getWarningUser());
|
||||
CompletableFuture<Member> warnedMember = botService.getMemberInServerAsync(warning.getWarnedUser());
|
||||
FutureMemberPair futurePair = FutureMemberPair.builder().firstMember(warningMember).secondMember(warnedMember).build();
|
||||
warningMembers.put(warning.getWarnId(), futurePair);
|
||||
});
|
||||
CompletableFuture<Void> sendingFuture = new CompletableFuture<>();
|
||||
FutureUtils.toSingleFutureGeneric(allFutures).handle((aVoid, throwable) -> {
|
||||
self.renderAndSendWarnDecayLogs(serverId, warningMembers).thenAccept(aVoid1 ->
|
||||
sendingFuture.complete(null)
|
||||
);
|
||||
return null;
|
||||
});
|
||||
|
||||
return sendingFuture;
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CompletionStage<Void> renderAndSendWarnDecayLogs(Long serverId, Map<ServerSpecificId, FutureMemberPair> warningMembers) {
|
||||
AServer server = serverManagementService.loadServer(serverId);
|
||||
List<WarnDecayWarning> warnDecayWarnings = new ArrayList<>();
|
||||
warningMembers.keySet().forEach(serverSpecificId -> {
|
||||
Warning warning = warnManagementService.findById(serverSpecificId.getId(), serverSpecificId.getServerId());
|
||||
FutureMemberPair pair = warningMembers.get(serverSpecificId);
|
||||
// TODO add ids to render in case any member left the server
|
||||
WarnDecayWarning warnDecayWarning = WarnDecayWarning
|
||||
.builder()
|
||||
.warnedMember(botService.getMemberInServer(warning.getWarnedUser()))
|
||||
.warningMember(botService.getMemberInServer(warning.getWarningUser()))
|
||||
.warnedMember(pair.getFirstMember().join())
|
||||
.warningMember(pair.getSecondMember().join())
|
||||
.warning(warning)
|
||||
.build();
|
||||
warnDecayWarnings.add(warnDecayWarning);
|
||||
});
|
||||
WarnDecayLogModel warnDecayLogModel = WarnDecayLogModel
|
||||
.builder()
|
||||
.guild(botService.getGuildByIdNullable(server.getId()))
|
||||
.guild(botService.getGuildById(server.getId()))
|
||||
.server(server)
|
||||
.warnings(warnDecayWarnings)
|
||||
.build();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
@@ -48,10 +49,15 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Mute> findMute(Long muteId, Long serverId) {
|
||||
public Optional<Mute> findMuteOptional(Long muteId, Long serverId) {
|
||||
return muteRepository.findByMuteId_IdAndMuteId_ServerId(muteId, serverId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mute findMute(Long muteId, Long serverId) {
|
||||
return findMuteOptional(muteId, serverId).orElseThrow(() -> new AbstractoRunTimeException("Mute not found."));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mute saveMute(Mute mute) {
|
||||
muteRepository.save(mute);
|
||||
|
||||
@@ -46,6 +46,11 @@ public class UserNoteManagementServiceBean implements UserNoteManagementService
|
||||
userNoteRepository.deleteByUserNoteId_IdAndUserNoteId_ServerId(id, server.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserNote loadNote(Long userNoteId, Long serverId) {
|
||||
return userNoteRepository.findByUserNoteId_IdAndUserNoteId_ServerId(userNoteId, serverId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean noteExists(Long id, AServer server) {
|
||||
return userNoteRepository.existsByUserNoteId_IdAndUserNoteId_ServerId(id, server.getId());
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
@@ -24,7 +25,7 @@ public class WarnManagementServiceBean implements WarnManagementService {
|
||||
public Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason, Long warnId) {
|
||||
log.info("Creating warning with id {} for user {} in server {} cast by user {}.",
|
||||
warnId, warnedAUser.getUserReference().getId(), warningAUser.getServerReference().getId(), warningAUser.getUserReference().getId());
|
||||
ServerSpecificId warningId = new ServerSpecificId(warnId, warningAUser.getServerReference().getId());
|
||||
ServerSpecificId warningId = new ServerSpecificId(warningAUser.getServerReference().getId(), warnId);
|
||||
Warning warning = Warning.builder()
|
||||
.reason(reason)
|
||||
.warnedUser(warnedAUser)
|
||||
@@ -64,10 +65,15 @@ public class WarnManagementServiceBean implements WarnManagementService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Warning> findById(Long id, Long serverId) {
|
||||
public Optional<Warning> findByIdOptional(Long id, Long serverId) {
|
||||
return warnRepository.findByWarnId_IdAndWarnId_ServerId(id, serverId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Warning findById(Long id, Long serverId) {
|
||||
return findByIdOptional(id, serverId).orElseThrow(() -> new AbstractoRunTimeException("Warning not found."));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteWarning(Warning warning) {
|
||||
log.info("Deleting warning with id {} in server {}.", warning.getWarnId().getId(), warning.getWarnId().getServerId());
|
||||
|
||||
@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||
import dev.sheldan.abstracto.moderation.service.WarnService;
|
||||
import dev.sheldan.abstracto.test.command.CommandConfigValidator;
|
||||
import dev.sheldan.abstracto.test.command.CommandTestUtilities;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
@@ -16,6 +17,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@Slf4j
|
||||
public class DecayWarningsTest {
|
||||
|
||||
@InjectMocks
|
||||
|
||||
@@ -39,7 +39,7 @@ public class DeleteWarningTest {
|
||||
AUserInAServer warningUser = MockUtils.getUserObject(6L, server);
|
||||
Warning existingWarning = Warning.builder().warnedUser(warnedUser).warningUser(warningUser).build();
|
||||
CommandContext parameters = CommandTestUtilities.getWithParameters(Arrays.asList(WARN_ID));
|
||||
when(warnManagementService.findById(WARN_ID, parameters.getGuild().getIdLong())).thenReturn(Optional.of(existingWarning));
|
||||
when(warnManagementService.findByIdOptional(WARN_ID, parameters.getGuild().getIdLong())).thenReturn(Optional.of(existingWarning));
|
||||
CommandResult result = testUnit.execute(parameters);
|
||||
verify(warnManagementService, times(1)).deleteWarning(existingWarning);
|
||||
CommandTestUtilities.checkSuccessfulCompletion(result);
|
||||
|
||||
@@ -64,15 +64,16 @@ public class UserNotesTest {
|
||||
when(userNoteManagementService.loadNotesForUser(userNoteUser)).thenReturn(userNotes);
|
||||
NoteEntryModel firstConvertedNote = NoteEntryModel.builder().build();
|
||||
NoteEntryModel secondConvertedNote = NoteEntryModel.builder().build();
|
||||
List<NoteEntryModel> convertedNotes = Arrays.asList(firstConvertedNote, secondConvertedNote);
|
||||
CompletableFuture<List<NoteEntryModel>> convertedNotes = CompletableFuture.completedFuture(Arrays.asList(firstConvertedNote, secondConvertedNote));
|
||||
when(userNotesConverter.fromNotes(userNotes)).thenReturn(convertedNotes);
|
||||
CompletableFuture<CommandResult> result = testUnit.executeAsync(parameters);
|
||||
verify(channelService, times(1)).sendEmbedTemplateInChannel(eq(UserNotes.USER_NOTES_RESPONSE_TEMPLATE), captor.capture(), eq(parameters.getChannel()));
|
||||
ListNotesModel usedModel = captor.getValue();
|
||||
Assert.assertEquals(convertedNotes.size(), usedModel.getUserNotes().size());
|
||||
List<NoteEntryModel> notes = convertedNotes.join();
|
||||
Assert.assertEquals(notes.size(), usedModel.getUserNotes().size());
|
||||
for (int i = 0; i < usedModel.getUserNotes().size(); i++) {
|
||||
NoteEntryModel usedEntry = usedModel.getUserNotes().get(i);
|
||||
NoteEntryModel expectedEntry = convertedNotes.get(i);
|
||||
NoteEntryModel expectedEntry = notes.get(i);
|
||||
Assert.assertEquals(expectedEntry, usedEntry);
|
||||
}
|
||||
Assert.assertEquals(userNoteUser, usedModel.getSpecifiedUser().getAUserInAServer());
|
||||
@@ -89,15 +90,16 @@ public class UserNotesTest {
|
||||
when(userNoteManagementService.loadNotesForServer(parameters.getUserInitiatedContext().getServer())).thenReturn(userNotes);
|
||||
NoteEntryModel firstConvertedNote = NoteEntryModel.builder().build();
|
||||
NoteEntryModel secondConvertedNote = NoteEntryModel.builder().build();
|
||||
List<NoteEntryModel> convertedNotes = Arrays.asList(firstConvertedNote, secondConvertedNote);
|
||||
CompletableFuture<List<NoteEntryModel>> convertedNotes = CompletableFuture.completedFuture(Arrays.asList(firstConvertedNote, secondConvertedNote));
|
||||
when(userNotesConverter.fromNotes(userNotes)).thenReturn(convertedNotes);
|
||||
CompletableFuture<CommandResult> result = testUnit.executeAsync(parameters);
|
||||
List<NoteEntryModel> notes = convertedNotes.join();
|
||||
verify(channelService, times(1)).sendEmbedTemplateInChannel(eq(UserNotes.USER_NOTES_RESPONSE_TEMPLATE), captor.capture(), eq(parameters.getChannel()));
|
||||
ListNotesModel usedModel = captor.getValue();
|
||||
Assert.assertEquals(convertedNotes.size(), usedModel.getUserNotes().size());
|
||||
Assert.assertEquals(notes.size(), usedModel.getUserNotes().size());
|
||||
for (int i = 0; i < usedModel.getUserNotes().size(); i++) {
|
||||
NoteEntryModel usedEntry = usedModel.getUserNotes().get(i);
|
||||
NoteEntryModel expectedEntry = convertedNotes.get(i);
|
||||
NoteEntryModel expectedEntry = notes.get(i);
|
||||
Assert.assertEquals(expectedEntry, usedEntry);
|
||||
}
|
||||
Assert.assertNull(usedModel.getSpecifiedUser());
|
||||
|
||||
@@ -13,7 +13,6 @@ import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarnEntry;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarningsModel;
|
||||
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
|
||||
import dev.sheldan.abstracto.test.MockUtils;
|
||||
import dev.sheldan.abstracto.test.command.CommandConfigValidator;
|
||||
import dev.sheldan.abstracto.test.command.CommandTestUtilities;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@@ -25,6 +24,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@@ -52,23 +52,37 @@ public class WarningsTest {
|
||||
@Captor
|
||||
private ArgumentCaptor<WarningsModel> captor;
|
||||
|
||||
@Mock
|
||||
private Warnings self;
|
||||
|
||||
@Test
|
||||
public void testNoParametersForWarningsCommand(){
|
||||
CommandContext noParams = CommandTestUtilities.getNoParameters();
|
||||
Warning firstWarning = Warning.builder().build();
|
||||
WarnEntry firstModelWarning = WarnEntry.builder().build();
|
||||
Warning secondWarning = Warning.builder().build();
|
||||
WarnEntry secondModelWarning = WarnEntry.builder().build();
|
||||
Warning firstWarning = Mockito.mock(Warning.class);
|
||||
WarnEntry firstModelWarning = Mockito.mock(WarnEntry.class);
|
||||
Warning secondWarning = Mockito.mock(Warning.class);
|
||||
WarnEntry secondModelWarning = Mockito.mock(WarnEntry.class);
|
||||
List<Warning> warningsToDisplay = Arrays.asList(firstWarning, secondWarning);
|
||||
List<WarnEntry> modelWarnings = Arrays.asList(firstModelWarning, secondModelWarning);
|
||||
when(warnManagementService.getAllWarningsOfServer(noParams.getUserInitiatedContext().getServer())).thenReturn(warningsToDisplay);
|
||||
when(warnEntryConverter.fromWarnings(warningsToDisplay)).thenReturn(modelWarnings);
|
||||
when(warnEntryConverter.fromWarnings(warningsToDisplay)).thenReturn(CompletableFuture.completedFuture(modelWarnings));
|
||||
|
||||
CompletableFuture<CommandResult> result = testUnit.executeAsync(noParams);
|
||||
CommandTestUtilities.checkSuccessfulCompletionAsync(result);
|
||||
verify(self, times(1)).renderWarnings(noParams, modelWarnings);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWarningsRendering() {
|
||||
CommandContext noParams = CommandTestUtilities.getNoParameters();
|
||||
WarnEntry firstModelWarning = Mockito.mock(WarnEntry.class);
|
||||
WarnEntry secondModelWarning = Mockito.mock(WarnEntry.class);
|
||||
Paginator paginator = Mockito.mock(Paginator.class);
|
||||
when(paginatorService.createPaginatorFromTemplate(eq(Warnings.WARNINGS_RESPONSE_TEMPLATE), captor.capture(), eq(eventWaiter))).thenReturn(paginator);
|
||||
CommandResult result = testUnit.execute(noParams);
|
||||
CommandTestUtilities.checkSuccessfulCompletion(result);
|
||||
List<WarnEntry> modelWarnings = Arrays.asList(firstModelWarning, secondModelWarning);
|
||||
testUnit.renderWarnings(noParams, modelWarnings);
|
||||
WarningsModel warningsModel = captor.getValue();
|
||||
Assert.assertEquals(warningsToDisplay.size(), warningsModel.getWarnings().size());
|
||||
Assert.assertEquals(firstModelWarning, warningsModel.getWarnings().get(0));
|
||||
Assert.assertEquals(secondModelWarning, warningsModel.getWarnings().get(1));
|
||||
}
|
||||
@@ -77,29 +91,26 @@ public class WarningsTest {
|
||||
public void testExecuteWarningsForMember(){
|
||||
Member member = Mockito.mock(Member.class);
|
||||
CommandContext parameters = CommandTestUtilities.getWithParameters(Arrays.asList(member));
|
||||
AUserInAServer warnedUser = MockUtils.getUserObject(5L, parameters.getUserInitiatedContext().getServer());
|
||||
when(userInServerManagementService.loadUser(member)).thenReturn(warnedUser);
|
||||
Warning firstWarning = Warning.builder().build();
|
||||
WarnEntry firstModelWarning = WarnEntry.builder().build();
|
||||
Warning secondWarning = Warning.builder().build();
|
||||
WarnEntry secondModelWarning = WarnEntry.builder().build();
|
||||
AUserInAServer warnedUser = Mockito.mock(AUserInAServer.class);
|
||||
Warning firstWarning = Mockito.mock(Warning.class);
|
||||
WarnEntry firstModelWarning = Mockito.mock(WarnEntry.class);
|
||||
Warning secondWarning = Mockito.mock(Warning.class);
|
||||
WarnEntry secondModelWarning = Mockito.mock(WarnEntry.class);
|
||||
List<Warning> warningsToDisplay = Arrays.asList(firstWarning, secondWarning);
|
||||
when(warnManagementService.getAllWarnsForUser(warnedUser)).thenReturn(warningsToDisplay);
|
||||
List<WarnEntry> modelWarnings = Arrays.asList(firstModelWarning, secondModelWarning);
|
||||
when(warnEntryConverter.fromWarnings(warningsToDisplay)).thenReturn(modelWarnings);
|
||||
Paginator paginator = Mockito.mock(Paginator.class);
|
||||
when(paginatorService.createPaginatorFromTemplate(eq(Warnings.WARNINGS_RESPONSE_TEMPLATE), captor.capture(), eq(eventWaiter))).thenReturn(paginator);
|
||||
CommandResult result = testUnit.execute(parameters);
|
||||
CommandTestUtilities.checkSuccessfulCompletion(result);
|
||||
WarningsModel warningsModel = captor.getValue();
|
||||
Assert.assertEquals(warningsToDisplay.size(), warningsModel.getWarnings().size());
|
||||
Assert.assertEquals(firstModelWarning, warningsModel.getWarnings().get(0));
|
||||
Assert.assertEquals(secondModelWarning, warningsModel.getWarnings().get(1));
|
||||
when(userInServerManagementService.loadUser(member)).thenReturn(warnedUser);
|
||||
when(warnManagementService.getAllWarnsForUser(warnedUser)).thenReturn(warningsToDisplay);
|
||||
when(warnEntryConverter.fromWarnings(warningsToDisplay)).thenReturn(CompletableFuture.completedFuture(modelWarnings));
|
||||
|
||||
CompletableFuture<CommandResult> result = testUnit.executeAsync(parameters);
|
||||
CommandTestUtilities.checkSuccessfulCompletionAsync(result);
|
||||
verify(self, times(1)).renderWarnings(parameters, modelWarnings);
|
||||
|
||||
}
|
||||
|
||||
@Test(expected = IncorrectParameterTypeException.class)
|
||||
public void testIncorrectParameterType() {
|
||||
CommandTestUtilities.executeWrongParametersTest(testUnit);
|
||||
CommandTestUtilities.executeWrongParametersTestAsync(testUnit);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package dev.sheldan.abstracto.moderation.converter;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.moderation.models.database.UserNote;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.NoteEntryModel;
|
||||
import dev.sheldan.abstracto.moderation.service.management.UserNoteManagementService;
|
||||
import dev.sheldan.abstracto.test.MockUtils;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.junit.Assert;
|
||||
@@ -18,7 +20,9 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@@ -34,10 +38,16 @@ public class UserNotesConverterTest {
|
||||
@Mock
|
||||
private BotService botService;
|
||||
|
||||
@Mock
|
||||
private UserNotesConverter self;
|
||||
|
||||
@Mock
|
||||
private UserNoteManagementService userNoteManagementService;
|
||||
|
||||
@Test
|
||||
public void testWithEmptyList() {
|
||||
List<NoteEntryModel> entryModels = testUnit.fromNotes(Collections.emptyList());
|
||||
Assert.assertEquals(0, entryModels.size());
|
||||
CompletableFuture<List<NoteEntryModel>> entryModels = testUnit.fromNotes(Collections.emptyList());
|
||||
Assert.assertEquals(0, entryModels.join().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -45,15 +55,34 @@ public class UserNotesConverterTest {
|
||||
AServer server = MockUtils.getServer();
|
||||
AUserInAServer userInAServer = MockUtils.getUserObject(4L, server);
|
||||
Member member = Mockito.mock(Member.class);
|
||||
when(botService.getMemberInServer(userInAServer)).thenReturn(member);
|
||||
UserNote firstNote = UserNote.builder().user(userInAServer).build();
|
||||
UserNote secondNote = UserNote.builder().user(userInAServer).build();
|
||||
List<NoteEntryModel> entryModels = testUnit.fromNotes(Arrays.asList(firstNote, secondNote));
|
||||
Assert.assertEquals(2, entryModels.size());
|
||||
NoteEntryModel firstEntry = entryModels.get(0);
|
||||
when(botService.getMemberInServerAsync(userInAServer)).thenReturn(CompletableFuture.completedFuture(member));
|
||||
UserNote firstNote = UserNote.builder().userNoteId(new ServerSpecificId(3L, 4L)).user(userInAServer).build();
|
||||
UserNote secondNote = UserNote.builder().userNoteId(new ServerSpecificId(3L, 5L)).user(userInAServer).build();
|
||||
testUnit.fromNotes(Arrays.asList(firstNote, secondNote));
|
||||
verify(self, times(1)).loadFullNotes(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadingFullNotes() {
|
||||
AUserInAServer userInAServer = Mockito.mock(AUserInAServer.class);
|
||||
Member member = Mockito.mock(Member.class);
|
||||
UserNote note1 = Mockito.mock(UserNote.class);
|
||||
UserNote note2 = Mockito.mock(UserNote.class);
|
||||
when(note1.getUser()).thenReturn(userInAServer);
|
||||
when(note2.getUser()).thenReturn(userInAServer);
|
||||
ServerSpecificId firstUserNoteId = new ServerSpecificId(3L, 4L);
|
||||
ServerSpecificId secondUserNoteId = new ServerSpecificId(3L, 5L);
|
||||
HashMap<ServerSpecificId, CompletableFuture<Member>> map = new HashMap<>();
|
||||
map.put(firstUserNoteId, CompletableFuture.completedFuture(member));
|
||||
map.put(secondUserNoteId, CompletableFuture.completedFuture(member));
|
||||
when(userNoteManagementService.loadNote(4L, 3L)).thenReturn(note1);
|
||||
when(userNoteManagementService.loadNote(5L, 3L)).thenReturn(note2);
|
||||
List<NoteEntryModel> models = testUnit.loadFullNotes(map);
|
||||
Assert.assertEquals(2, models.size());
|
||||
NoteEntryModel firstEntry = models.get(0);
|
||||
Assert.assertEquals(member, firstEntry.getFullUser().getMember());
|
||||
Assert.assertEquals(userInAServer, firstEntry.getFullUser().getAUserInAServer());
|
||||
NoteEntryModel secondEntry = entryModels.get(1);
|
||||
NoteEntryModel secondEntry = models.get(1);
|
||||
Assert.assertEquals(member, secondEntry.getFullUser().getMember());
|
||||
Assert.assertEquals(userInAServer, secondEntry.getFullUser().getAUserInAServer());
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package dev.sheldan.abstracto.moderation.converter;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.FutureMemberPair;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarnEntry;
|
||||
import dev.sheldan.abstracto.test.MockUtils;
|
||||
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@@ -17,11 +20,14 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@Slf4j
|
||||
public class WarnEntryConverterTest {
|
||||
|
||||
@InjectMocks
|
||||
@@ -30,34 +36,74 @@ public class WarnEntryConverterTest {
|
||||
@Mock
|
||||
private BotService botService;
|
||||
|
||||
@Mock
|
||||
private WarnEntryConverter self;
|
||||
|
||||
@Mock
|
||||
private WarnManagementService warnManagementService;
|
||||
|
||||
@Mock
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
private static final Long SERVER_ID = 5L;
|
||||
private static final Long WARN_ID_1 = 6L;
|
||||
private static final Long WARN_ID_2 = 7L;
|
||||
|
||||
@Test
|
||||
public void testWithEmptyList() {
|
||||
List<WarnEntry> entryModels = testUnit.fromWarnings(Collections.emptyList());
|
||||
Assert.assertEquals(0, entryModels.size());
|
||||
CompletableFuture<List<WarnEntry>> entryModels = testUnit.fromWarnings(Collections.emptyList());
|
||||
Assert.assertEquals(0, entryModels.join().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWithSomeUserNotes() {
|
||||
AServer server = MockUtils.getServer();
|
||||
AUserInAServer warnedUserInAServer = MockUtils.getUserObject(4L, server);
|
||||
AUserInAServer warningUserInAServer = MockUtils.getUserObject(6L, server);
|
||||
AUserInAServer warnedUser = Mockito.mock(AUserInAServer.class);
|
||||
AUserInAServer warningUser = Mockito.mock(AUserInAServer.class);
|
||||
Member warnedMember = Mockito.mock(Member.class);
|
||||
Member warningMember = Mockito.mock(Member.class);
|
||||
when(botService.getMemberInServer(warnedUserInAServer)).thenReturn(warnedMember);
|
||||
when(botService.getMemberInServer(warningUserInAServer)).thenReturn(warningMember);
|
||||
Warning firstNote = Warning.builder().warnedUser(warnedUserInAServer).warningUser(warningUserInAServer).build();
|
||||
Warning secondNote = Warning.builder().warnedUser(warnedUserInAServer).warningUser(warningUserInAServer).build();
|
||||
List<WarnEntry> entryModels = testUnit.fromWarnings(Arrays.asList(firstNote, secondNote));
|
||||
Assert.assertEquals(2, entryModels.size());
|
||||
WarnEntry firstEntry = entryModels.get(0);
|
||||
when(botService.getMemberInServerAsync(warnedUser)).thenReturn(CompletableFuture.completedFuture(warnedMember));
|
||||
when(botService.getMemberInServerAsync(warningUser)).thenReturn(CompletableFuture.completedFuture(warningMember));
|
||||
Warning firstNote = Warning.builder().warnId(new ServerSpecificId(3L, 4L)).warnedUser(warnedUser).warningUser(warningUser).build();
|
||||
Warning secondNote = Warning.builder().warnId(new ServerSpecificId(3L, 5L)).warnedUser(warnedUser).warningUser(warningUser).build();
|
||||
testUnit.fromWarnings(Arrays.asList(firstNote, secondNote));
|
||||
verify(self, times(1)).loadFullWarnEntries(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadingFullNotes() {
|
||||
AUserInAServer warnedUser = Mockito.mock(AUserInAServer.class);
|
||||
AUserInAServer warningUser = Mockito.mock(AUserInAServer.class);
|
||||
Member warningMember = Mockito.mock(Member.class);
|
||||
Member warnedMember = Mockito.mock(Member.class);
|
||||
Warning warning1 = Mockito.mock(Warning.class);
|
||||
Warning warning2 = Mockito.mock(Warning.class);
|
||||
ServerSpecificId firstWarnId = new ServerSpecificId(SERVER_ID, WARN_ID_1);
|
||||
when(warning1.getWarnId()).thenReturn(firstWarnId);
|
||||
ServerSpecificId secondWarnId = new ServerSpecificId(SERVER_ID, WARN_ID_2);
|
||||
when(warning2.getWarnId()).thenReturn(secondWarnId);
|
||||
HashMap<ServerSpecificId, FutureMemberPair> map = new HashMap<>();
|
||||
FutureMemberPair memberPair = FutureMemberPair.builder().firstMember(CompletableFuture.completedFuture(warningMember)).secondMember(CompletableFuture.completedFuture(warnedMember)).build();
|
||||
map.put(firstWarnId, memberPair);
|
||||
map.put(secondWarnId, memberPair);
|
||||
when(warnManagementService.findById(WARN_ID_1, SERVER_ID)).thenReturn(warning1);
|
||||
when(warnManagementService.findById(WARN_ID_2, SERVER_ID)).thenReturn(warning2);
|
||||
when(userInServerManagementService.loadUser(warnedMember)).thenReturn(warnedUser);
|
||||
when(userInServerManagementService.loadUser(warningMember)).thenReturn(warningUser);
|
||||
List<WarnEntry> models = testUnit.loadFullWarnEntries(map);
|
||||
Assert.assertEquals(2, models.size());
|
||||
WarnEntry firstEntry = models.get(0);
|
||||
Assert.assertEquals(warningMember, firstEntry.getWarningUser().getMember());
|
||||
Assert.assertEquals(warnedMember, firstEntry.getWarnedUser().getMember());
|
||||
Assert.assertEquals(warningUserInAServer, firstEntry.getWarningUser().getAUserInAServer());
|
||||
Assert.assertEquals(warnedUserInAServer, firstEntry.getWarnedUser().getAUserInAServer());
|
||||
WarnEntry secondEntry = entryModels.get(1);
|
||||
Assert.assertEquals(warnedUser, firstEntry.getWarnedUser().getAUserInAServer());
|
||||
Assert.assertEquals(warningUser, firstEntry.getWarningUser().getAUserInAServer());
|
||||
Assert.assertEquals(WARN_ID_1, firstEntry.getWarning().getWarnId().getId());
|
||||
Assert.assertEquals(SERVER_ID, firstEntry.getWarning().getWarnId().getServerId());
|
||||
WarnEntry secondEntry = models.get(1);
|
||||
Assert.assertEquals(warningMember, secondEntry.getWarningUser().getMember());
|
||||
Assert.assertEquals(warnedMember, secondEntry.getWarnedUser().getMember());
|
||||
Assert.assertEquals(warningUserInAServer, secondEntry.getWarningUser().getAUserInAServer());
|
||||
Assert.assertEquals(warnedUserInAServer, secondEntry.getWarnedUser().getAUserInAServer());
|
||||
Assert.assertEquals(warnedUser, secondEntry.getWarnedUser().getAUserInAServer());
|
||||
Assert.assertEquals(warningUser, secondEntry.getWarningUser().getAUserInAServer());
|
||||
Assert.assertEquals(WARN_ID_2, secondEntry.getWarning().getWarnId().getId());
|
||||
Assert.assertEquals(SERVER_ID, secondEntry.getWarning().getWarnId().getServerId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ public class BanServiceBeanTest {
|
||||
when(mockedGuild.ban(userId.toString(), 0, REASON)).thenReturn(mockedAction);
|
||||
MessageToSend mockedMessage = Mockito.mock(MessageToSend.class);
|
||||
when(templateService.renderEmbedTemplate(BanServiceBean.BAN_ID_LOG_TEMPLATE, context)).thenReturn(mockedMessage);
|
||||
when(botService.getGuildById(serverId)).thenReturn(Optional.of(mockedGuild));
|
||||
when(botService.getGuildByIdOptional(serverId)).thenReturn(Optional.of(mockedGuild));
|
||||
testUnit.banMember(serverId, userId, REASON, context);
|
||||
verify(mockedGuild, times(1)).ban(userId.toString(), 0, REASON);
|
||||
verify(postTargetService, times(1)).sendEmbedInPostTarget(mockedMessage, ModerationPostTarget.BAN_LOG, serverId);
|
||||
@@ -81,7 +81,7 @@ public class BanServiceBeanTest {
|
||||
Long userId = 8L;
|
||||
Long serverId = 5L;
|
||||
ServerContext context = Mockito.mock(ServerContext.class);
|
||||
when(botService.getGuildById(serverId)).thenReturn(Optional.empty());
|
||||
when(botService.getGuildByIdOptional(serverId)).thenReturn(Optional.empty());
|
||||
testUnit.banMember(serverId, userId, REASON, context);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import dev.sheldan.abstracto.scheduling.service.SchedulerService;
|
||||
import dev.sheldan.abstracto.templating.model.MessageToSend;
|
||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||
import dev.sheldan.abstracto.test.MockUtils;
|
||||
import dev.sheldan.abstracto.test.command.CommandTestUtilities;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -43,6 +42,7 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import static dev.sheldan.abstracto.moderation.service.MuteServiceBean.MUTE_NOTIFICATION_TEMPLATE;
|
||||
import static dev.sheldan.abstracto.moderation.service.MuteServiceBean.UN_MUTE_LOG_TEMPLATE;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@@ -234,24 +234,6 @@ public class MuteServiceBeanTest {
|
||||
verifyDirectMute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMuteAUserInAServer() {
|
||||
when(botService.getMemberInServer(userBeingMuted)).thenReturn(memberBeingMuted);
|
||||
when(botService.getMemberInServer(userMuting)).thenReturn(memberMuting);
|
||||
Instant unMuteDate = shorterMute();
|
||||
when(memberBeingMuted.getGuild()).thenReturn(guild);
|
||||
when(memberBeingMuted.getUser()).thenReturn(jdaUserBeingMuted);
|
||||
when(muteRoleManagementService.muteRoleForServerExists(server)).thenReturn(true);
|
||||
when(muteRoleManagementService.retrieveMuteRoleForServer(server)).thenReturn(muteRole);
|
||||
|
||||
String notificationText = "text";
|
||||
when(templateService.renderTemplate(eq(MUTE_NOTIFICATION_TEMPLATE), any(MuteNotification.class))).thenReturn(notificationText);
|
||||
when(messageService.sendMessageToUser(memberBeingMuted.getUser(), notificationText)).thenReturn(CompletableFuture.completedFuture(null));
|
||||
when(roleService.addRoleToUserFuture(userBeingMuted, muteRole.getRole())).thenReturn(CompletableFuture.completedFuture(null));
|
||||
testUnit.muteAUserInAServer(userBeingMuted, userMuting, REASON, unMuteDate, cause);
|
||||
verifyDirectMute();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMuteMemberWithLog() {
|
||||
when(userInServerManagementService.loadUser(memberBeingMuted)).thenReturn(userBeingMuted);
|
||||
@@ -294,15 +276,30 @@ public class MuteServiceBeanTest {
|
||||
public void testEndMute() {
|
||||
setupUnMuteMocks(true);
|
||||
when(mute.getMutedUser()).thenReturn(userBeingMuted);
|
||||
when(mute.getMutingUser()).thenReturn(userMuting);
|
||||
when(mute.getServer()).thenReturn(server);
|
||||
when(muteManagementService.findMute(MUTE_ID, SERVER_ID)).thenReturn(Optional.of(mute));
|
||||
when(muteManagementService.findMuteOptional(MUTE_ID, SERVER_ID)).thenReturn(Optional.of(mute));
|
||||
when(roleService.removeRoleFromUserFuture(userBeingMuted, aRole)).thenReturn(CompletableFuture.completedFuture(null));
|
||||
when(botService.getMemberInServerAsync(userBeingMuted)).thenReturn(CompletableFuture.completedFuture(memberBeingMuted));
|
||||
when(botService.getMemberInServerAsync(userMuting)).thenReturn(CompletableFuture.completedFuture(memberMuting));
|
||||
testUnit.endMute(MUTE_ID, SERVER_ID);
|
||||
verify(self, times(1)).sendUnmuteLog(eq(MUTE_ID), any(Guild.class), any(CompletableFuture.class), any(CompletableFuture.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendUnmuteLog() {
|
||||
when(guild.getIdLong()).thenReturn(SERVER_ID);
|
||||
when(muteManagementService.findMute(MUTE_ID, SERVER_ID)).thenReturn(mute);
|
||||
when(serverManagementService.loadServer(SERVER_ID)).thenReturn(server);
|
||||
when(templateService.renderEmbedTemplate(eq(UN_MUTE_LOG_TEMPLATE), any(UnMuteLog.class))).thenReturn(messageToSend);
|
||||
when(postTargetService.sendEmbedInPostTarget(eq(messageToSend), eq(MutingPostTarget.MUTE_LOG), anyLong())).thenReturn(Arrays.asList(CompletableFuture.completedFuture(null)));
|
||||
testUnit.sendUnmuteLog(MUTE_ID, guild, CompletableFuture.completedFuture(memberMuting), CompletableFuture.completedFuture(memberBeingMuted));
|
||||
verify(self, times(1)).endMuteInDatabase(MUTE_ID, SERVER_ID);
|
||||
}
|
||||
|
||||
@Test(expected = NoMuteFoundException.class)
|
||||
public void testEndNonExistingMute() {
|
||||
when(muteManagementService.findMute(MUTE_ID, SERVER_ID)).thenReturn(Optional.empty());
|
||||
when(muteManagementService.findMuteOptional(MUTE_ID, SERVER_ID)).thenReturn(Optional.empty());
|
||||
testUnit.endMute(MUTE_ID, SERVER_ID);
|
||||
}
|
||||
|
||||
@@ -373,10 +370,12 @@ public class MuteServiceBeanTest {
|
||||
|
||||
private void executeUnMuteWithLogTest(boolean stillInGuild) {
|
||||
when(mute.getMutedUser()).thenReturn(userBeingMuted);
|
||||
when(mute.getMutingUser()).thenReturn(userMuting);
|
||||
when(mute.getServer()).thenReturn(server);
|
||||
setupUnMuteMocks(stillInGuild);
|
||||
when(roleService.removeRoleFromUserFuture(userBeingMuted, aRole)).thenReturn(CompletableFuture.completedFuture(null));
|
||||
when(postTargetService.sendEmbedInPostTarget(messageToSend, MutingPostTarget.MUTE_LOG, server.getId())).thenReturn(CommandTestUtilities.messageFutureList());
|
||||
when(botService.getMemberInServerAsync(userBeingMuted)).thenReturn(CompletableFuture.completedFuture(memberBeingMuted));
|
||||
when(botService.getMemberInServerAsync(userMuting)).thenReturn(CompletableFuture.completedFuture(memberMuting));
|
||||
testUnit.unMuteUser(userBeingMuted);
|
||||
|
||||
}
|
||||
@@ -385,10 +384,8 @@ public class MuteServiceBeanTest {
|
||||
when(mute.getMuteId()).thenReturn(new ServerSpecificId(SERVER_ID, MUTE_ID));
|
||||
when(muteManagementService.getAMuteOf(userBeingMuted)).thenReturn(mute);
|
||||
when(muteRoleManagementService.retrieveMuteRoleForServer(server)).thenReturn(muteRole);
|
||||
when(botService.getGuildByIdNullable(server.getId())).thenReturn(guild);
|
||||
when(botService.getGuildById(server.getId())).thenReturn(guild);
|
||||
when(botService.isUserInGuild(guild, userBeingMuted)).thenReturn(stillInGuild);
|
||||
when(botService.getMemberInServer(userBeingMuted)).thenReturn(memberBeingMuted);
|
||||
when(templateService.renderEmbedTemplate(eq(MuteServiceBean.UN_MUTE_LOG_TEMPLATE), any(UnMuteLog.class))).thenReturn(messageToSend);
|
||||
}
|
||||
|
||||
private void verifyDirectMute() {
|
||||
|
||||
@@ -57,6 +57,9 @@ public class WarnServiceBeanTest {
|
||||
@Mock
|
||||
private ConfigService configService;
|
||||
|
||||
@Mock
|
||||
private WarnServiceBean self;
|
||||
|
||||
@Mock
|
||||
private Member warnedMember;
|
||||
|
||||
@@ -128,14 +131,14 @@ public class WarnServiceBeanTest {
|
||||
public void testDecayWarningsForServer() {
|
||||
setupWarnDecay();
|
||||
testUnit.decayWarningsForServer(server);
|
||||
verifyWarnDecayWithLog(true);
|
||||
verify(self, times(1)).renderAndSendWarnDecayLogs(eq(SERVER_ID), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecayAllWarningsForServerWithLog() {
|
||||
setupWarnDecay();
|
||||
testUnit.decayAllWarningsForServer(server, true);
|
||||
verifyWarnDecayWithLog(true);
|
||||
verify(self, times(1)).renderAndSendWarnDecayLogs(eq(SERVER_ID), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -148,14 +151,10 @@ public class WarnServiceBeanTest {
|
||||
@Test
|
||||
public void testDecayAllWarningsWithoutWarnings() {
|
||||
List<Warning> warnings = Collections.emptyList();
|
||||
when(botService.getGuildByIdNullable(server.getId())).thenReturn(guild);
|
||||
when(templateService.renderEmbedTemplate(eq(WARN_DECAY_LOG_TEMPLATE_KEY), warnDecayLogModelArgumentCaptor.capture())).thenReturn(messageToSend);
|
||||
when(server.getId()).thenReturn(SERVER_ID);
|
||||
when(warnManagementService.getActiveWarningsInServerOlderThan(eq(server), any(Instant.class))).thenReturn(warnings);
|
||||
testUnit.decayAllWarningsForServer(server, true);
|
||||
verify(postTargetService, times(1)).sendEmbedInPostTarget(messageToSend, WarnDecayPostTarget.DECAY_LOG, server.getId());
|
||||
WarnDecayLogModel model = warnDecayLogModelArgumentCaptor.getValue();
|
||||
List<WarnDecayWarning> usedWarnings = model.getWarnings();
|
||||
Assert.assertEquals(0, usedWarnings.size());
|
||||
verify(self, times(1)).renderAndSendWarnDecayLogs(eq(SERVER_ID), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -218,11 +217,9 @@ public class WarnServiceBeanTest {
|
||||
setupWarnings();
|
||||
when(configService.getLongValue(WarningDecayFeature.DECAY_DAYS_KEY, server.getId())).thenReturn(5L);
|
||||
List<Warning> warnings = Arrays.asList(firstWarning, secondWarning);
|
||||
when(botService.getMemberInServer(warningUser)).thenReturn(warningMember);
|
||||
when(botService.getMemberInServer(firstWarnedUser)).thenReturn(warnedMember);
|
||||
when(botService.getMemberInServer(secondWarnedUser)).thenReturn(secondWarnedMember);
|
||||
when(botService.getGuildByIdNullable(server.getId())).thenReturn(guild);
|
||||
when(templateService.renderEmbedTemplate(eq(WARN_DECAY_LOG_TEMPLATE_KEY), warnDecayLogModelArgumentCaptor.capture())).thenReturn(messageToSend);
|
||||
when(botService.getMemberInServerAsync(warningUser)).thenReturn(CompletableFuture.completedFuture(warningMember));
|
||||
when(botService.getMemberInServerAsync(firstWarnedUser)).thenReturn(CompletableFuture.completedFuture(warnedMember));
|
||||
when(botService.getMemberInServerAsync(secondWarnedUser)).thenReturn(CompletableFuture.completedFuture(secondWarnedMember));
|
||||
when(warnManagementService.getActiveWarningsInServerOlderThan(eq(server), any(Instant.class))).thenReturn(warnings);
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ public class MuteManagementServiceBeanTest {
|
||||
Long serverId = 7L;
|
||||
Mute mute = Mute.builder().muteId(new ServerSpecificId(serverId, id)).build();
|
||||
when(muteRepository.findByMuteId_IdAndMuteId_ServerId(id, serverId)).thenReturn(Optional.of(mute));
|
||||
Optional<Mute> foundMuteOptional = testUnit.findMute(id, serverId);
|
||||
Optional<Mute> foundMuteOptional = testUnit.findMuteOptional(id, serverId);
|
||||
Assert.assertTrue(foundMuteOptional.isPresent());
|
||||
foundMuteOptional.ifPresent(foundMute -> Assert.assertEquals(id, foundMute.getMuteId().getId()));
|
||||
}
|
||||
@@ -79,7 +79,7 @@ public class MuteManagementServiceBeanTest {
|
||||
Long id = 5L;
|
||||
Long serverId = 7L;
|
||||
when(muteRepository.findByMuteId_IdAndMuteId_ServerId(id, serverId)).thenReturn(Optional.empty());
|
||||
Optional<Mute> foundMuteOptional = testUnit.findMute(id, serverId);
|
||||
Optional<Mute> foundMuteOptional = testUnit.findMuteOptional(id, serverId);
|
||||
Assert.assertFalse(foundMuteOptional.isPresent());
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ public class WarnManagementServiceBeanTest {
|
||||
Long serverId = 8L;
|
||||
Warning existingWarning = getWarning();
|
||||
when(warnRepository.findByWarnId_IdAndWarnId_ServerId(warnId, serverId)).thenReturn(Optional.ofNullable(existingWarning));
|
||||
Optional<Warning> warningOptional = testUnit.findById(warnId, serverId);
|
||||
Optional<Warning> warningOptional = testUnit.findByIdOptional(warnId, serverId);
|
||||
Assert.assertTrue(warningOptional.isPresent());
|
||||
warningOptional.ifPresent(foundWarning -> Assert.assertEquals(existingWarning, foundWarning));
|
||||
}
|
||||
@@ -109,7 +109,7 @@ public class WarnManagementServiceBeanTest {
|
||||
Long warnId = 6L;
|
||||
Long serverId = 8L;
|
||||
when(warnRepository.findByWarnId_IdAndWarnId_ServerId(warnId, serverId)).thenReturn(Optional.ofNullable(null));
|
||||
Optional<Warning> warningOptional = testUnit.findById(warnId, serverId);
|
||||
Optional<Warning> warningOptional = testUnit.findByIdOptional(warnId, serverId);
|
||||
Assert.assertFalse(warningOptional.isPresent());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.moderation.models.template.commands;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
@Getter
|
||||
@Setter
|
||||
@SuperBuilder
|
||||
public class WarningsModel extends UserInitiatedServerContext {
|
||||
public class WarningsModel extends SlimUserInitiatedServerContext {
|
||||
/**
|
||||
* A collection of {@link dev.sheldan.abstracto.moderation.models.database.Warning}s being rendered, might be all warnings of the server, or only the warnings of a specific user
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface MuteService {
|
||||
CompletableFuture<Void> muteMember(Member memberToMute, Member userMuting, String reason, Instant unMuteDate, ServerChannelMessage message);
|
||||
CompletableFuture<Void> muteAUserInAServer(AUserInAServer member, AUserInAServer userMuting, String reason, Instant unMuteDate, ServerChannelMessage message);
|
||||
CompletableFuture<Void> muteUserInServer(FullUserInServer userToMute, FullUserInServer userMuting, String reason, Instant unMuteDate, ServerChannelMessage message);
|
||||
CompletableFuture<Void> applyMuteRole(AUserInAServer aUserInAServer);
|
||||
CompletableFuture<Void> muteMemberWithLog(MuteContext context);
|
||||
|
||||
@@ -31,7 +31,8 @@ public interface MuteManagementService {
|
||||
* @param muteId The id of the mute to search for
|
||||
* @return An optional containing a {@link Mute} if the ID exists, and null otherwise
|
||||
*/
|
||||
Optional<Mute> findMute(Long muteId, Long serverId);
|
||||
Optional<Mute> findMuteOptional(Long muteId, Long serverId);
|
||||
Mute findMute(Long muteId, Long serverId);
|
||||
|
||||
/**
|
||||
* Saves the given mute to the database.
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.List;
|
||||
public interface UserNoteManagementService {
|
||||
UserNote createUserNote(AUserInAServer aUserInAServer, String note);
|
||||
void deleteNote(Long id, AServer server);
|
||||
UserNote loadNote(Long userNoteId, Long serverId);
|
||||
boolean noteExists(Long id, AServer server);
|
||||
List<UserNote> loadNotesForUser(AUserInAServer aUserInAServer);
|
||||
List<UserNote> loadNotesForServer(AServer server);
|
||||
|
||||
@@ -15,6 +15,7 @@ public interface WarnManagementService {
|
||||
List<Warning> getAllWarnsForUser(AUserInAServer aUserInAServer);
|
||||
List<Warning> getAllWarningsOfServer(AServer server);
|
||||
Long getActiveWarnsForUser(AUserInAServer aUserInAServer);
|
||||
Optional<Warning> findById(Long id, Long serverId);
|
||||
Optional<Warning> findByIdOptional(Long id, Long serverId);
|
||||
Warning findById(Long id, Long serverId);
|
||||
void deleteWarning(Warning warn);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user