mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-26 13:46:19 +00:00
[AB-196] adding confirmation requirement to various commands
refactoring command received handler in order to re-use when confirmation has been given removing reaction from showSuggestion and remind command adding log message for message deleted message, in case the member left all commands from now on must work without the member field from the message, as this is not available when retrieving the message
This commit is contained in:
@@ -58,7 +58,7 @@ public class ShowSuggestion extends AbstractConditionableCommand {
|
||||
.templated(true)
|
||||
.async(true)
|
||||
.supportsEmbedException(true)
|
||||
.causesReaction(true)
|
||||
.causesReaction(false)
|
||||
.parameters(parameters)
|
||||
.help(helpInfo)
|
||||
.build();
|
||||
|
||||
@@ -114,7 +114,13 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> createSuggestionMessage(Message commandMessage, String text) {
|
||||
Member suggester = commandMessage.getMember();
|
||||
// it is done that way, because we cannot always be sure, that the message containsn the member
|
||||
return memberService.getMemberInServerAsync(commandMessage.getGuild().getIdLong(), commandMessage.getAuthor().getIdLong())
|
||||
.thenCompose(suggester -> self.createMessageWithSuggester(commandMessage, text, suggester));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CompletableFuture<Void> createMessageWithSuggester(Message commandMessage, String text, Member suggester) {
|
||||
Long serverId = suggester.getGuild().getIdLong();
|
||||
AServer server = serverManagementService.loadServer(serverId);
|
||||
AUserInAServer userSuggester = userInServerManagementService.loadOrCreateUser(suggester);
|
||||
@@ -126,7 +132,7 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
.state(SuggestionState.NEW)
|
||||
.serverId(serverId)
|
||||
.message(commandMessage)
|
||||
.member(commandMessage.getMember())
|
||||
.member(suggester)
|
||||
.suggesterUser(userSuggester)
|
||||
.useButtons(useButtons)
|
||||
.suggester(suggester.getUser())
|
||||
@@ -210,22 +216,24 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> acceptSuggestion(Long suggestionId, Message commandMessage, String text) {
|
||||
return memberService.getMemberInServerAsync(commandMessage.getGuild().getIdLong(), commandMessage.getAuthor().getIdLong())
|
||||
.thenCompose(member -> self.setSuggestionToFinalState(member, suggestionId, commandMessage, text, SuggestionState.ACCEPTED));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public CompletableFuture<Void> setSuggestionToFinalState(Member executingMember, Long suggestionId, Message commandMessage, String text, SuggestionState state) {
|
||||
Long serverId = commandMessage.getGuild().getIdLong();
|
||||
Suggestion suggestion = suggestionManagementService.getSuggestion(serverId, suggestionId);
|
||||
suggestionManagementService.setSuggestionState(suggestion, SuggestionState.ACCEPTED);
|
||||
suggestionManagementService.setSuggestionState(suggestion, state);
|
||||
cancelSuggestionReminder(suggestion);
|
||||
log.info("Accepting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
|
||||
return updateSuggestion(commandMessage.getMember(), text, suggestion);
|
||||
log.info("Setting suggestion {} in server {} to state {}", suggestionId, suggestion.getServer().getId(), state);
|
||||
return updateSuggestion(executingMember, text, suggestion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> vetoSuggestion(Long suggestionId, Message commandMessage, String text) {
|
||||
Long serverId = commandMessage.getGuild().getIdLong();
|
||||
Suggestion suggestion = suggestionManagementService.getSuggestion(serverId, suggestionId);
|
||||
suggestionManagementService.setSuggestionState(suggestion, SuggestionState.VETOED);
|
||||
cancelSuggestionReminder(suggestion);
|
||||
log.info("Vetoing suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
|
||||
return updateSuggestion(commandMessage.getMember(), text, suggestion);
|
||||
return memberService.getMemberInServerAsync(commandMessage.getGuild().getIdLong(), commandMessage.getAuthor().getIdLong())
|
||||
.thenCompose(member -> self.setSuggestionToFinalState(member, suggestionId, commandMessage, text, SuggestionState.VETOED));
|
||||
}
|
||||
|
||||
private CompletableFuture<Void> updateSuggestion(Member memberExecutingCommand, String reason, Suggestion suggestion) {
|
||||
@@ -293,12 +301,8 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
|
||||
@Override
|
||||
public CompletableFuture<Void> rejectSuggestion(Long suggestionId, Message commandMessage, String text) {
|
||||
Long serverId = commandMessage.getGuild().getIdLong();
|
||||
Suggestion suggestion = suggestionManagementService.getSuggestion(serverId, suggestionId);
|
||||
suggestionManagementService.setSuggestionState(suggestion, SuggestionState.REJECTED);
|
||||
cancelSuggestionReminder(suggestion);
|
||||
log.info("Rejecting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
|
||||
return updateSuggestion(commandMessage.getMember(), text, suggestion);
|
||||
return memberService.getMemberInServerAsync(commandMessage.getGuild().getIdLong(), commandMessage.getAuthor().getIdLong())
|
||||
.thenCompose(member -> self.setSuggestionToFinalState(member, suggestionId, commandMessage, text, SuggestionState.REJECTED));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
package dev.sheldan.abstracto.suggestion.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.exception.ChannelNotInGuildException;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.*;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
@@ -16,10 +12,8 @@ import dev.sheldan.abstracto.suggestion.config.SuggestionFeatureDefinition;
|
||||
import dev.sheldan.abstracto.suggestion.config.SuggestionFeatureMode;
|
||||
import dev.sheldan.abstracto.suggestion.config.SuggestionPostTarget;
|
||||
import dev.sheldan.abstracto.suggestion.exception.SuggestionNotFoundException;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.Suggestion;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionState;
|
||||
import dev.sheldan.abstracto.suggestion.model.template.SuggestionLog;
|
||||
import dev.sheldan.abstracto.suggestion.model.template.SuggestionUpdateModel;
|
||||
import dev.sheldan.abstracto.suggestion.service.management.SuggestionManagementService;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import org.junit.Test;
|
||||
@@ -113,17 +107,12 @@ public class SuggestionServiceBeanTest {
|
||||
public void testCreateSuggestionMessage() {
|
||||
String suggestionText = "text";
|
||||
when(guild.getIdLong()).thenReturn(SERVER_ID);
|
||||
when(serverManagementService.loadServer(SERVER_ID)).thenReturn(server);
|
||||
MessageToSend messageToSend = Mockito.mock(MessageToSend.class);
|
||||
when(templateService.renderEmbedTemplate(eq(SuggestionServiceBean.SUGGESTION_CREATION_TEMPLATE), any(SuggestionLog.class), eq(SERVER_ID))).thenReturn(messageToSend);
|
||||
Message suggestionMessage = Mockito.mock(Message.class);
|
||||
when(counterService.getNextCounterValue(server, SuggestionServiceBean.SUGGESTION_COUNTER_KEY)).thenReturn(SUGGESTION_ID);
|
||||
List<CompletableFuture<Message>> postingFutures = Arrays.asList(CompletableFuture.completedFuture(suggestionMessage));
|
||||
when(postTargetService.sendEmbedInPostTarget(messageToSend, SuggestionPostTarget.SUGGESTION, SERVER_ID)).thenReturn(postingFutures);
|
||||
when(message.getMember()).thenReturn(member);
|
||||
when(member.getGuild()).thenReturn(guild);
|
||||
when(member.getIdLong()).thenReturn(SUGGESTER_ID);
|
||||
when(message.getAuthor()).thenReturn(suggesterUser);
|
||||
when(message.getGuild()).thenReturn(guild);
|
||||
when(suggesterUser.getIdLong()).thenReturn(SUGGESTER_ID);
|
||||
when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(member));
|
||||
testUnit.createSuggestionMessage(message, suggestionText);
|
||||
verify(self).createMessageWithSuggester(message, suggestionText, member);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -139,20 +128,26 @@ public class SuggestionServiceBeanTest {
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = SuggestionNotFoundException.class)
|
||||
@Test
|
||||
public void testAcceptNotExistingSuggestion() {
|
||||
when(suggestionManagementService.getSuggestion(SERVER_ID, SUGGESTION_ID)).thenThrow(new SuggestionNotFoundException(SUGGESTION_ID));
|
||||
when(guild.getIdLong()).thenReturn(SERVER_ID);
|
||||
when(message.getGuild()).thenReturn(guild);
|
||||
when(message.getAuthor()).thenReturn(suggesterUser);
|
||||
when(suggesterUser.getIdLong()).thenReturn(SUGGESTER_ID);
|
||||
when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(member));
|
||||
testUnit.acceptSuggestion(SUGGESTION_ID, message, CLOSING_TEXT);
|
||||
verify(self).setSuggestionToFinalState(member, SUGGESTION_ID, message, CLOSING_TEXT, SuggestionState.ACCEPTED);
|
||||
}
|
||||
|
||||
@Test(expected = SuggestionNotFoundException.class)
|
||||
@Test
|
||||
public void testRejectNotExistingSuggestion() {
|
||||
when(suggestionManagementService.getSuggestion(SERVER_ID, SUGGESTION_ID)).thenThrow(new SuggestionNotFoundException(SUGGESTION_ID));
|
||||
when(guild.getIdLong()).thenReturn(SERVER_ID);
|
||||
when(message.getGuild()).thenReturn(guild);
|
||||
when(message.getAuthor()).thenReturn(suggesterUser);
|
||||
when(suggesterUser.getIdLong()).thenReturn(SUGGESTER_ID);
|
||||
when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(member));
|
||||
testUnit.rejectSuggestion(SUGGESTION_ID, message, CLOSING_TEXT);
|
||||
verify(self).setSuggestionToFinalState(member, SUGGESTION_ID, message, CLOSING_TEXT, SuggestionState.REJECTED);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user