[AB-246] changing parameter handling to only actually evaluate the necessary parameter handlers, this helps avoiding providing the wrong parameter to the actual command

This commit is contained in:
Sheldan
2021-05-02 17:40:52 +02:00
parent 23dd02312a
commit 2a5c462c35
43 changed files with 210 additions and 92 deletions

View File

@@ -175,7 +175,7 @@ public class CommandReceivedHandlerTest {
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter));
when(parameter.getType()).thenReturn(Duration.class);
Duration parsedDuration = Duration.ofMinutes(1);
when(parameterHandler.handles(Duration.class)).thenReturn(true);
when(parameterHandler.handles(eq(Duration.class), any())).thenReturn(true);
when(parameterHandler.handle(any(UnparsedCommandParameterPiece.class), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(parsedDuration);
testUnit.onMessageReceived(event);
verify(self, times(1)).executeCommand(eq(event), eq(command), parametersArgumentCaptor.capture());
@@ -190,7 +190,7 @@ public class CommandReceivedHandlerTest {
setupCommandAndMessage(MESSAGE_CONTENT_ONE_PARAMETER);
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter));
when(parameter.getType()).thenReturn(String.class);
when(parameterHandler.handles(String.class)).thenReturn(true);
when(parameterHandler.handles(eq(String.class), any())).thenReturn(true);
when(parameterHandler.handle(any(UnparsedCommandParameterPiece.class), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(PARAMETER_TEXT_1);
testUnit.onMessageReceived(event);
verify(self, times(1)).executeCommand(eq(event), eq(command), parametersArgumentCaptor.capture());
@@ -206,7 +206,7 @@ public class CommandReceivedHandlerTest {
when(parameter.isRemainder()).thenReturn(true);
when(parameter.getType()).thenReturn(String.class);
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter));
when(parameterHandler.handles(String.class)).thenReturn(true);
when(parameterHandler.handles(eq(String.class), any())).thenReturn(true);
when(parameterHandler.handle(argThat(parameterPieceMatcher(PARAMETER_TEXT_1)), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(PARAMETER_TEXT_1);
when(parameterHandler.handle(argThat(parameterPieceMatcher(PARAMETER_TEXT_2)), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(PARAMETER_TEXT_2);
testUnit.onMessageReceived(event);
@@ -225,8 +225,8 @@ public class CommandReceivedHandlerTest {
when(secondParameter.getType()).thenReturn(String.class);
when(secondParameter.isRemainder()).thenReturn(true);
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter, secondParameter));
when(parameterHandler.handles(Duration.class)).thenReturn(true);
when(secondParameterHandler.handles(String.class)).thenReturn(true);
when(parameterHandler.handles(eq(Duration.class), any())).thenReturn(true);
when(secondParameterHandler.handles(eq(String.class), any())).thenReturn(true);
Duration parsedDuration = Duration.ofMinutes(1);
when(parameterHandler.handle(argThat(parameterPieceMatcher(PARAMETER_TEXT_1)), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(parsedDuration);
when(secondParameterHandler.handle(argThat(parameterPieceMatcher(PARAMETER_TEXT_2)), any(CommandParameterIterators.class), eq(secondParameter), eq(message), eq(command))).thenReturn(PARAMETER_TEXT_2);
@@ -245,7 +245,7 @@ public class CommandReceivedHandlerTest {
when(parameter.getType()).thenReturn(Duration.class);
when(parameter.isRemainder()).thenReturn(false);
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter, secondParameter));
when(parameterHandler.handles(Duration.class)).thenReturn(true);
when(parameterHandler.handles(eq(Duration.class), any())).thenReturn(true);
when(parameterHandler.async()).thenReturn(true);
Duration parsedDuration = Duration.ofMinutes(1);
when(parameterHandler.handleAsync(argThat(parameterPieceMatcher(PARAMETER_TEXT_1)), any(CommandParameterIterators.class),
@@ -266,8 +266,8 @@ public class CommandReceivedHandlerTest {
when(secondParameter.getType()).thenReturn(String.class);
when(secondParameter.isRemainder()).thenReturn(true);
when(commandConfiguration.getParameters()).thenReturn(Arrays.asList(parameter, secondParameter));
when(parameterHandler.handles(Duration.class)).thenReturn(true);
when(secondParameterHandler.handles(String.class)).thenReturn(true);
when(parameterHandler.handles(eq(Duration.class), any())).thenReturn(true);
when(secondParameterHandler.handles(eq(String.class), any())).thenReturn(true);
when(secondParameterHandler.async()).thenReturn(true);
Duration parsedDuration = Duration.ofMinutes(1);
when(parameterHandler.handle(argThat(parameterPieceMatcher(PARAMETER_TEXT_1)), any(CommandParameterIterators.class), eq(parameter), eq(message), eq(command))).thenReturn(parsedDuration);

View File

@@ -46,14 +46,17 @@ public class AChannelParameterHandlerImplTest extends AbstractParameterHandlerTe
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(AChannel.class));
Assert.assertTrue(testUnit.handles(AChannel.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -54,14 +54,17 @@ public class AEmoteParameterHandlerImplImplTest extends AbstractParameterHandler
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(AEmote.class));
Assert.assertTrue(testUnit.handles(AEmote.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.service.RoleService;
import net.dv8tion.jda.api.entities.Message;
@@ -54,14 +53,17 @@ public class ARoleParameterHandlerImplImplTest extends AbstractParameterHandlerT
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(ARole.class));
Assert.assertTrue(testUnit.handles(ARole.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import org.junit.Assert;
import org.junit.Test;
@@ -10,6 +11,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class BooleanParameterHandlerImplTest extends AbstractParameterHandlerTest {
@@ -22,14 +25,18 @@ public class BooleanParameterHandlerImplTest extends AbstractParameterHandlerTes
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Boolean.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Boolean.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -9,6 +11,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class DoubleParameterHandlerImplTest extends AbstractParameterHandlerTest {
@@ -21,14 +25,18 @@ public class DoubleParameterHandlerImplTest extends AbstractParameterHandlerTest
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Double.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Double.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import dev.sheldan.abstracto.core.exception.DurationFormatException;
import org.junit.Assert;
import org.junit.Test;
@@ -13,6 +15,8 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class DurationParameterHandlerImplTest extends AbstractParameterHandlerTest {
@@ -25,14 +29,18 @@ public class DurationParameterHandlerImplTest extends AbstractParameterHandlerTe
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Duration.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Duration.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
@@ -41,17 +42,20 @@ public class EmoteParameterHandlerImplTest extends AbstractParameterHandlerTest
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
private static final Long EMOTE_ID = 111111111111111111L;
private static final String EMOTE_NAME = "test";
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Emote.class));
Assert.assertTrue(testUnit.handles(Emote.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -54,14 +54,17 @@ public class FullEmoteParameterHandlerImplImplTest extends AbstractParameterHand
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(FullEmote.class));
Assert.assertTrue(testUnit.handles(FullEmote.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -54,14 +54,17 @@ public class FullRoleParameterHandlerImplImplTest extends AbstractParameterHandl
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(FullRole.class));
Assert.assertTrue(testUnit.handles(FullRole.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -9,6 +11,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class IntegerParameterHandlerImplTest extends AbstractParameterHandlerTest {
@@ -21,14 +25,18 @@ public class IntegerParameterHandlerImplTest extends AbstractParameterHandlerTes
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Integer.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Integer.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -9,6 +11,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class LongParameterHandlerImplTest extends AbstractParameterHandlerTest {
@@ -21,14 +25,18 @@ public class LongParameterHandlerImplTest extends AbstractParameterHandlerTest {
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Long.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Long.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@@ -47,16 +47,19 @@ public class MemberParameterHandlerImplTest extends AbstractParameterHandlerTest
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
private static final Long USER_ID = 111111111111111111L;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Member.class));
Assert.assertTrue(testUnit.handles(Member.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -3,6 +3,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Role;
@@ -44,16 +46,20 @@ public class RoleParameterHandlerImplTest extends AbstractParameterHandlerTest {
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
private static final Long ROLE_ID = 111111111111111111L;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(Role.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(Role.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test

View File

@@ -3,6 +3,8 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -44,16 +46,20 @@ public class TextChannelParameterHandlerImplTest extends AbstractParameterHandle
@Mock
private Command command;
@Mock
private UnparsedCommandParameterPiece unparsedCommandParameterPiece;
private static final Long CHANNEL_ID = 111111111111111111L;
@Test
public void testSuccessfulCondition() {
Assert.assertTrue(testUnit.handles(TextChannel.class));
when(unparsedCommandParameterPiece.getType()).thenReturn(ParameterPieceType.STRING);
Assert.assertTrue(testUnit.handles(TextChannel.class, unparsedCommandParameterPiece));
}
@Test
public void testWrongCondition() {
Assert.assertFalse(testUnit.handles(String.class));
Assert.assertFalse(testUnit.handles(String.class, unparsedCommandParameterPiece));
}
@Test