Compare commits

...

3 Commits

Author SHA1 Message Date
ca0ab13316
migrate ButtonTest to mockito
All checks were successful
github-mirror / push-github (push) Successful in 4s
Build / Gradle-Build (push) Successful in 12s
Test / Gradle-Test (push) Successful in 21s
2025-02-19 14:10:45 +01:00
ded81983e3
migrate AutocompleteTest and add mockito ofc 2025-02-19 14:00:01 +01:00
92704ca230
add correct null handling for api objects 2025-02-19 13:56:45 +01:00
6 changed files with 62 additions and 11 deletions

View File

@ -57,6 +57,8 @@ public class Discord4JWrapper extends LibraryWrapper {
if (api != null)
api.on(InteractionCreateEvent.class)
.subscribe(event -> handleInteraction(event));
else
logger.warn("GatewayDiscordClient was null so no Events were subscribed to.");
logger.info("Discord4J wrapper loaded!");
}

View File

@ -18,6 +18,7 @@ repositories {
dependencies {
// Use JUnit Jupiter for testing.
testImplementation(libs.junit.jupiter)
testImplementation(libs.mockito)
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation(libs.log4j)

View File

@ -44,7 +44,10 @@ public class JavacordWrapper extends LibraryWrapper {
public JavacordWrapper(DiscordApi api) {
this.api = api;
this.contextObjectProvider = new JavacordContextObjectProvider();
api.addInteractionCreateListener((e) -> handleInteraction(e.getInteraction()));
if (api != null)
api.addInteractionCreateListener((e) -> handleInteraction(e.getInteraction()));
else
logger.warn("DiscordApi was null so no Events were subscribed to.");
logger.info("Javacord wrapper loaded!");
}

View File

@ -1,12 +1,18 @@
package net.tomatentum.marinara.test.javacord;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.Optional;
import org.javacord.api.interaction.AutocompleteInteraction;
import org.javacord.api.interaction.SlashCommandInteractionOption;
import org.junit.jupiter.api.Test;
import net.tomatentum.marinara.Marinara;
import net.tomatentum.marinara.test.javacord.mocks.AutocompleteInteractionMock;
import net.tomatentum.marinara.test.javacord.mocks.DiscordApiMock;
import net.tomatentum.marinara.wrapper.LibraryWrapper;
import net.tomatentum.marinara.wrapper.javacord.JavacordWrapper;
@ -14,10 +20,21 @@ public class AutoCompleteTest {
@Test
public void testAutocomplete() {
LibraryWrapper wrapper = new JavacordWrapper(new DiscordApiMock()); //null okay as we don't use the discord API in this test.
SlashCommandInteractionOption optionMock = mock();
AutocompleteInteraction autocompleteInteractionMock = mock();
when(optionMock.getName()).thenReturn("foo");
when(optionMock.getStringValue()).thenReturn(Optional.of("test"));
when(autocompleteInteractionMock.getCommandName()).thenReturn("test");
when(autocompleteInteractionMock.getFocusedOption()).thenReturn(optionMock);
when(autocompleteInteractionMock.getOptions()).thenReturn(Collections.emptyList());
LibraryWrapper wrapper = new JavacordWrapper(null); //null okay as we don't use the discord API in this test.
Marinara marinara = Marinara.load(wrapper);
marinara.getRegistry().addInteractions(new TestAutocomplete());
wrapper.handleInteraction(new AutocompleteInteractionMock());
assertTrue(AutocompleteInteractionMock.didAutocompleteRun);
wrapper.handleInteraction(autocompleteInteractionMock);
verify(autocompleteInteractionMock).respondWithChoices(any());
}
}

View File

@ -7,8 +7,7 @@ import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import net.tomatentum.marinara.Marinara;
import net.tomatentum.marinara.test.javacord.mocks.ButtonInteractionMock;
import net.tomatentum.marinara.test.javacord.mocks.DiscordApiMock;
import net.tomatentum.marinara.test.javacord.mocks.CommonMocks;
import net.tomatentum.marinara.wrapper.LibraryWrapper;
import net.tomatentum.marinara.wrapper.javacord.JavacordWrapper;
@ -17,10 +16,10 @@ public class ButtonTest {
@Test
public void testButtonExecution() {
LibraryWrapper wrapper = new JavacordWrapper(new DiscordApiMock()); //null okay as we don't use the discord API in this test.
LibraryWrapper wrapper = new JavacordWrapper(null); //null okay as we don't use the discord API in this test.
Marinara marinara = Marinara.load(wrapper);
marinara.getRegistry().addInteractions(new TestButton());
wrapper.handleInteraction(new ButtonInteractionMock("test"));
wrapper.handleInteraction(CommonMocks.getButtonInteractionMock("test"));
assertTrue(TestButton.didRun);
}

View File

@ -0,0 +1,29 @@
package net.tomatentum.marinara.test.javacord.mocks;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Optional;
import org.javacord.api.entity.channel.TextChannel;
import org.javacord.api.entity.message.Message;
import org.javacord.api.entity.server.Server;
import org.javacord.api.entity.user.User;
import org.javacord.api.interaction.ButtonInteraction;
public class CommonMocks {
public static ButtonInteraction getButtonInteractionMock(String customId) {
ButtonInteraction buttonInteractionMock = mock();
when(buttonInteractionMock.getCustomId()).thenReturn(customId);
when(buttonInteractionMock.getMessage()).thenReturn(mock(Message.class));
when(buttonInteractionMock.getServer()).thenReturn(Optional.of(mock(Server.class)));
when(buttonInteractionMock.getChannel()).thenReturn(Optional.of(mock(TextChannel.class)));
when(buttonInteractionMock.getUser()).thenReturn(mock(User.class));
return buttonInteractionMock;
}
}