Skip to content

Commit 88a2a23

Browse files
authored
Add Tests for /codemc link and /codemc unlink
1 parent 2aa73c5 commit 88a2a23

File tree

2 files changed

+83
-2
lines changed

2 files changed

+83
-2
lines changed

src/main/java/io/codemc/bot/commands/CmdCodeMC.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,11 @@ public void withHookReply(InteractionHook hook, SlashCommandEvent event, Guild g
390390
String username = event.getOption("username", null, OptionMapping::getAsString);
391391
Member target = event.getOption("discord", null, OptionMapping::getAsMember);
392392

393+
if (username == null || username.isEmpty()) {
394+
CommandUtil.EmbedReply.from(hook).error("Invalid Jenkins User provided!").send();
395+
return;
396+
}
397+
393398
if (JenkinsAPI.getJenkinsUser(username).isBlank()) {
394399
CommandUtil.EmbedReply.from(hook).error("The user does not have a Jenkins account!").send();
395400
return;
@@ -458,6 +463,14 @@ public void withHookReply(InteractionHook hook, SlashCommandEvent event, Guild g
458463
.filter(user -> userTarget == null || user.equals(userTarget))
459464
.findFirst()
460465
.orElse(null);
466+
467+
if (username == null) {
468+
if (userTarget == null)
469+
CommandUtil.EmbedReply.from(hook).error("The user is not linked to any Jenkins/Nexus account!").send();
470+
else
471+
CommandUtil.EmbedReply.from(hook).error("The user is not linked to the specified Jenkins/Nexus account!").send();
472+
return;
473+
}
461474

462475
if (DatabaseAPI.getUser(username) == null) {
463476
CommandUtil.EmbedReply.from(hook).error("The user is not linked to any Jenkins/Nexus account!").send();

src/test/java/io/codemc/bot/commands/TestCmdCodeMC.java

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,19 @@
1313
import org.junit.jupiter.api.DisplayName;
1414
import org.junit.jupiter.api.Test;
1515

16+
import io.codemc.api.database.DatabaseAPI;
1617
import io.codemc.api.jenkins.JenkinsAPI;
1718
import io.codemc.api.nexus.NexusAPI;
1819
import io.codemc.bot.MockCodeMCBot;
1920
import io.codemc.bot.MockJDA;
2021
import io.codemc.bot.commands.CmdCodeMC.Jenkins;
22+
import io.codemc.bot.commands.CmdCodeMC.Link;
2123
import io.codemc.bot.commands.CmdCodeMC.Nexus;
2224
import io.codemc.bot.commands.CmdCodeMC.Remove;
25+
import io.codemc.bot.commands.CmdCodeMC.Unlink;
2326
import io.codemc.bot.commands.CmdCodeMC.Validate;
24-
import io.codemc.bot.utils.APIUtil;
2527
import io.codemc.bot.utils.CommandUtil;
28+
import net.dv8tion.jda.api.entities.Member;
2629

2730
public class TestCmdCodeMC {
2831

@@ -165,9 +168,74 @@ public void testValidate() {
165168
assertNotNull(NexusAPI.getNexusUser("TestValidate_31"));
166169
assertNotNull(NexusAPI.getNexusUser("TestValidate_32"));
167170

168-
MockCodeMCBot.INSTANCE.delete( "TestValidate_30");
171+
MockCodeMCBot.INSTANCE.delete("TestValidate_30");
169172
MockCodeMCBot.INSTANCE.delete("TestValidate_31");
170173
MockCodeMCBot.INSTANCE.delete("TestValidate_32");
171174
}
172175

176+
@Test
177+
@DisplayName("Test /codemc link")
178+
public void testLink() {
179+
Link link = (Link) command.getChildren()[4];
180+
181+
assertEquals("link", link.getName());
182+
assertEquals(2, link.getOptions().size());
183+
assertFalse(link.allowedRoles.isEmpty());
184+
185+
TestCommandListener listener = new TestCommandListener(link);
186+
187+
Member m1 = MockJDA.mockMember("TestLink");
188+
MockJDA.GUILD.addRoleToMember(m1, MockJDA.AUTHOR);
189+
190+
MockCodeMCBot.INSTANCE.create("TestLink", "Job");
191+
DatabaseAPI.removeUser("TestLink");
192+
193+
assertNull(DatabaseAPI.getUser("TestLink"));
194+
MockJDA.assertSlashCommandEvent(listener, Map.of("username", "TestLink", "discord", m1), CommandUtil.embedSuccess("Linked Discord User TestLink to Jenkins User TestLink!"));
195+
assertNotNull(DatabaseAPI.getUser("TestLink"));
196+
assertEquals(m1.getIdLong(), DatabaseAPI.getUser("TestLink").getDiscord());
197+
198+
MockJDA.assertSlashCommandEvent(listener, Map.of("username", "TestLink", "discord", m1), CommandUtil.embedSuccess("Linked Discord User TestLink to Jenkins User TestLink!"));
199+
MockJDA.assertSlashCommandEvent(listener, Map.of(), CommandUtil.embedError("Invalid Jenkins User provided!"));
200+
MockJDA.assertSlashCommandEvent(listener, Map.of("username", "Inexistent", "discord", m1), CommandUtil.embedError("The user does not have a Jenkins account!"));
201+
MockJDA.assertSlashCommandEvent(listener, Map.of("username", "TestLink"), CommandUtil.embedError("Invalid Discord User provided!"));
202+
203+
MockJDA.GUILD.removeRoleFromMember(m1, MockJDA.AUTHOR);
204+
205+
MockJDA.assertSlashCommandEvent(listener, Map.of("username", "TestLink", "discord", m1), CommandUtil.embedError("The user is not an Author!"));
206+
207+
MockCodeMCBot.INSTANCE.delete("TestLink");
208+
DatabaseAPI.removeUser("TestLink");
209+
}
210+
211+
@Test
212+
@DisplayName("Test /codemc unlink")
213+
public void testUnlink() {
214+
Unlink unlink = (Unlink) command.getChildren()[5];
215+
216+
assertEquals("unlink", unlink.getName());
217+
assertEquals(2, unlink.getOptions().size());
218+
assertFalse(unlink.allowedRoles.isEmpty());
219+
220+
TestCommandListener listener = new TestCommandListener(unlink);
221+
222+
Member m1 = MockJDA.mockMember("TestUnlink");
223+
MockJDA.GUILD.addRoleToMember(m1, MockJDA.AUTHOR);
224+
225+
DatabaseAPI.removeUser("TestUnlink");
226+
MockCodeMCBot.INSTANCE.delete("TestUnlink");
227+
MockCodeMCBot.INSTANCE.create("TestUnlink", "Job");
228+
DatabaseAPI.addUser("TestUnlink", m1.getIdLong());
229+
230+
assertNotNull(DatabaseAPI.getUser("TestUnlink"));
231+
MockJDA.assertSlashCommandEvent(listener, Map.of("discord", m1), CommandUtil.embedSuccess("Unlinked Discord User TestUnlink from their Jenkins/Nexus account!"));
232+
assertNull(DatabaseAPI.getUser("TestUnlink"));
233+
234+
MockJDA.assertSlashCommandEvent(listener, Map.of(), CommandUtil.embedError("Invalid Discord User provided!"));
235+
MockJDA.assertSlashCommandEvent(listener, Map.of("discord", m1), CommandUtil.embedError("The user is not linked to any Jenkins/Nexus account!"));
236+
237+
MockCodeMCBot.INSTANCE.delete("TestUnlink");
238+
DatabaseAPI.removeUser("TestUnlink");
239+
}
240+
173241
}

0 commit comments

Comments
 (0)