From e23ed4ca8cdd562c3783fc78f33e34f0f0112fbd Mon Sep 17 00:00:00 2001 From: Aarit Jayaswal Date: Mon, 31 Mar 2025 17:02:47 -0700 Subject: [PATCH 1/8] got connected to my personal server, should work --- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/java/org/jointheleague/Launcher.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48c0a02c..2733ed5d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/org/jointheleague/Launcher.java b/src/main/java/org/jointheleague/Launcher.java index 17b44585..ce957f2e 100644 --- a/src/main/java/org/jointheleague/Launcher.java +++ b/src/main/java/org/jointheleague/Launcher.java @@ -8,6 +8,7 @@ public static void main(String[] args) throws InterruptedException { //Initialize variables String channelName = System.getenv("CHANNEL_NAME"); String discordToken = System.getenv("DISCORD_TOKEN"); + boolean printDiscordInvite = true; //Instantiate DiscordBot and connect From 18470adc82fdc4fe7cfb2929b8fc628a8331a831 Mon Sep 17 00:00:00 2001 From: opie10 Date: Mon, 21 Apr 2025 17:00:52 -0700 Subject: [PATCH 2/8] leaguebot working. 1st feature is mostly functional. quickly checking bugs. answer does appear to generate, but then issue is that is says ask for a riddle. do tests next --- .../compileJava/previous-compilation-data.bin | Bin 0 -> 70550 bytes .../jointheleague/discord_bot/DiscordBot.java | 2 + .../student/first_feature/FirstFeature.java | 116 ++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..16a02f95e4d2ea5db5c6e390b8818e5f896ef7a1 GIT binary patch literal 70550 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 z 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�YUp>~)oL2TR*nl3adkJ#QZhgNDPon6GQ26*oq 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 literal 0 HcmV?d00001 diff --git a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java index cefb5f79..3707e267 100644 --- a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java +++ b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java @@ -14,6 +14,7 @@ import org.jointheleague.features.examples.first_features.RandomNumber; import org.jointheleague.features.help_embed.HelpListener; import org.jointheleague.features.student.first_feature.FeatureOne; +import org.jointheleague.features.student.first_feature.FirstFeature; public class DiscordBot { @@ -61,6 +62,7 @@ public void connect(boolean printInvite) throws InterruptedException { addFeature(new HighLowGame(channelName)); addFeature(new NewsApi(channelName)); addFeature(new CatFactsApi(channelName)); + addFeature(new FirstFeature(channelName)); } private void addFeature(Feature feature){ diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java new file mode 100644 index 00000000..34bf3aba --- /dev/null +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -0,0 +1,116 @@ +package org.jointheleague.features.student.first_feature; + + +import org.jointheleague.api_wrapper.ReceivedMessage; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.util.Random; + +public class FirstFeature extends Feature { + + public final String COMMAND = "!riddle"; + public final String ANSWERCOMMAND = "!riddleanswer"; + boolean riddleSent = false; + + String[] generatedRiddle; + + public FirstFeature(String channelName) { + super(channelName); + + //Create a help embed to describe feature when !help command is sent + helpEmbed = new HelpEmbed( + COMMAND, + "Simple command, when called produced a mind-boggling riddle for the user to ponder. \n\nAnswer provided with " + ANSWERCOMMAND + ); + + } + + @Override + public void handle(ReceivedMessage event) { + + + String messageContent = event.getMessageContent(); + System.out.println(messageContent); + + if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)) { + generatedRiddle = generateRiddle(); + //respond to message here + event.sendResponse("Here is your riddle:\n" + generatedRiddle[0] + "\nType '" + ANSWERCOMMAND + "' to get the answer!"); + riddleSent = true; + } + if (messageContent.startsWith(ANSWERCOMMAND) && riddleSent) { + event.sendResponse("The answer to your riddle is:\n" + generatedRiddle[1]); + riddleSent = false; + + } + if (messageContent.startsWith(ANSWERCOMMAND) && !riddleSent { + event.sendResponse("You have to ask for a riddle first!"); + } + } + + public String[] generateRiddle() { + String[] riddle = new String[2]; + Random r = new Random(); + int rand = r.nextInt(10); + switch (rand) { + case 0: + riddle[0] = "What is always on the ground but never dirty?"; + riddle[1] = "A shadow"; + + break; + case 1: + riddle[0] = "What can fill a room without taking up any space?"; + riddle[1] = "Light"; + + break; + case 2: + riddle[0] = "What do you bury alive, but dig up dead?"; + riddle[1] = "A plant"; + + break; + case 3: + riddle[0] = "I am always old, but sometimes also new. While I'm never sad, sometimes I am blue. \nI am never empty, but only sometimes full. I never push, but I always pull. What am I?"; + riddle[1] = "The moon"; + + break; + case 4: + riddle[0] = "If you give me a drink, I die, but if you feed me I grow, what am I?"; + riddle[1] = "Fire"; + + break; + case 5: + riddle[0] = "What can go up but can never come down?"; + riddle[1] = "Your age"; + + break; + case 6: + riddle[0] = "What word in the dictionary is spelled incorrectly?"; + riddle[1] = "Incorrectly"; + + break; + case 7: + riddle[0] = "What occurs once in a minute, twice in a moment, and never in 1000 years?"; + riddle[1] = "The letter 'M'"; + + break; + case 8: + riddle[0] = "What is so fragile that saying its name breaks it?"; + riddle[1] = "Silence"; + + break; + case 9: + riddle[0] = "What has 13 hearts but no other organs?"; + riddle[1] = "A deck of cards"; + + break; + default: + riddle[0] = "What has 4 fingers and a thumb, but isn't alive?"; + riddle[1] = "A glove"; + + } + ; + return riddle; + } + +} \ No newline at end of file From ef7e89cd0e34a027b5f024fb52fd270f255a086c Mon Sep 17 00:00:00 2001 From: Aarit Jayaswal Date: Mon, 28 Apr 2025 16:58:38 -0700 Subject: [PATCH 3/8] done tests and feature. intellij is TWEAKING fully theres a second process going on and it scares me. hopefully it works after commit? --- .../compileJava/previous-compilation-data.bin | Bin 70550 -> 70550 bytes .../student/first_feature/FirstFeature.java | 14 ++- .../first_feature/FirstFeatureTest.java | 116 ++++++++++++++++++ 3 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 16a02f95e4d2ea5db5c6e390b8818e5f896ef7a1..a80e40bc8b0eacc904fe54e5b44f24cabe535dfa 100644 GIT binary patch delta 282 zcmV+#0poUJvl_p@{lxcX_arZ~_z%rDpp)!_Lh(J0SRu;bxmEUi%;b g00044w;?XLAx60&MxP;NHv1p|0004Fmq`-=O(VB+@Bjb+ delta 282 zcmV+#0p0!R>NQyh-^5@Sgp_9}CD-ccG<+NAWA?$b>Hr5Gn+VGPP0~RiaJIuUeK{tn2P-n4# zOx06kMr1}YWdMa~a&vSx5YV@l9m}C4n1ZAG!6$Bb50g^^A}wClN`0Pl64w4?{_=Db zC=6^tZB9RK0EA_Cb0!cIjpB3bt!#k<;!O1+u1zF^q64?00|A5&BSy9%MxP;NHv1p| g0004Fw;?XLAyl~`Lx~|>Ui%;b00044mq`-=O=_id_5c6? diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java index 34bf3aba..860e4b86 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -31,25 +31,30 @@ public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); - System.out.println(messageContent); + // System.out.println(messageContent); + + if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)&&!riddleSent) { - if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)) { generatedRiddle = generateRiddle(); //respond to message here event.sendResponse("Here is your riddle:\n" + generatedRiddle[0] + "\nType '" + ANSWERCOMMAND + "' to get the answer!"); riddleSent = true; } - if (messageContent.startsWith(ANSWERCOMMAND) && riddleSent) { + else if (messageContent.startsWith(ANSWERCOMMAND) && riddleSent) { event.sendResponse("The answer to your riddle is:\n" + generatedRiddle[1]); riddleSent = false; } - if (messageContent.startsWith(ANSWERCOMMAND) && !riddleSent { + else if (messageContent.startsWith(ANSWERCOMMAND) && !riddleSent ){ event.sendResponse("You have to ask for a riddle first!"); } + else{ + return; + } } public String[] generateRiddle() { + System.out.println("gen"); String[] riddle = new String[2]; Random r = new Random(); int rand = r.nextInt(10); @@ -110,6 +115,7 @@ public String[] generateRiddle() { } ; + System.out.println(riddle[0]+riddle[1]); return riddle; } diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java new file mode 100644 index 00000000..6556697d --- /dev/null +++ b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java @@ -0,0 +1,116 @@ +package org.jointheleague.features.student.first_feature; + +import org.jointheleague.api_wrapper.ReceivedMessage; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.jointheleague.features.templates.FeatureTemplate; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +public class FirstFeatureTest { + private final String testChannelName = "testing"; + private final FirstFeature firstFeature = new FirstFeature(testChannelName); + + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + + @Mock + private ReceivedMessage receivedMessage; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + System.setOut(new PrintStream(outContent)); + } + + @AfterEach + public void itShouldNotPrintToSystemOut() { + String expected = ""; + String actual = outContent.toString(); + + assertEquals(expected, actual); + System.setOut(originalOut); + } + + @Test + void itShouldHaveACommand() { + //Given + + //When + String command = firstFeature.COMMAND; + + //Then + + if(!(firstFeature instanceof Feature)){ + assertNotEquals("!command", command); + } + + assertNotEquals("", command); + assertNotEquals("!", command); + assertNotEquals("!command", command); + assertEquals('!', command.charAt(0)); + assertNotNull(command); + } + + @Test + void itShouldHandleMessagesWithCommand() { + //Given + HelpEmbed helpEmbed = new HelpEmbed(firstFeature.COMMAND, "test"); + when(receivedMessage.getMessageContent()).thenReturn(firstFeature.COMMAND); + + //When + firstFeature.handle(receivedMessage); + + //Then + verify(receivedMessage, times(1)).sendResponse(anyString()); + } + + @Test + void itShouldNotHandleMessagesWithoutCommand() { + //Given + String command = ""; + when(receivedMessage.getMessageContent()).thenReturn(command); + + //When + firstFeature.handle(receivedMessage); + + //Then + verify(receivedMessage, never()).sendResponse(""); + } + + @Test + void itShouldHaveAHelpEmbed() { + //Given + + //When + HelpEmbed actualHelpEmbed = firstFeature.getHelpEmbed(); + + //Then + assertNotNull(actualHelpEmbed); + } + + @Test + void itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed() { + //Given + + //When + String helpEmbedTitle = firstFeature.getHelpEmbed().getTitle(); + String command = firstFeature.COMMAND; + + //Then + assertEquals(command, helpEmbedTitle); + } + +} From 3925c1901f2b7d2dbfb7cefe632ac065364baf3a Mon Sep 17 00:00:00 2001 From: Aarit Jayaswal Date: Mon, 5 May 2025 16:00:32 -0700 Subject: [PATCH 4/8] removed print statements and checked for stuff needed to make pull request. I think I'm good! --- .../features/student/first_feature/FirstFeature.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java index 860e4b86..9a9a8897 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -31,7 +31,7 @@ public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent(); - // System.out.println(messageContent); + if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)&&!riddleSent) { @@ -54,7 +54,6 @@ else if (messageContent.startsWith(ANSWERCOMMAND) && !riddleSent ){ } public String[] generateRiddle() { - System.out.println("gen"); String[] riddle = new String[2]; Random r = new Random(); int rand = r.nextInt(10); @@ -115,7 +114,7 @@ public String[] generateRiddle() { } ; - System.out.println(riddle[0]+riddle[1]); + return riddle; } From 1ef34521f21dde8baee43dc6e6463118390baba5 Mon Sep 17 00:00:00 2001 From: opie10 Date: Wed, 9 Jul 2025 17:00:19 -0700 Subject: [PATCH 5/8] working on coverage bc embeds are mean. 2 tests left, just changed the thing a big (generate riddle), so fixing my tests for that --- .../student/first_feature/FirstFeature.java | 15 ++-- .../first_feature/FirstFeatureTest.java | 78 ++++++++++++++++++- 2 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java index 9a9a8897..2570e9ce 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -34,8 +34,9 @@ public void handle(ReceivedMessage event) { if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)&&!riddleSent) { - - generatedRiddle = generateRiddle(); + Random r = new Random(); + int rand = r.nextInt(10); + generatedRiddle = generateRiddle(rand); //respond to message here event.sendResponse("Here is your riddle:\n" + generatedRiddle[0] + "\nType '" + ANSWERCOMMAND + "' to get the answer!"); riddleSent = true; @@ -53,10 +54,10 @@ else if (messageContent.startsWith(ANSWERCOMMAND) && !riddleSent ){ } } - public String[] generateRiddle() { + public String[] generateRiddle(int r) { String[] riddle = new String[2]; - Random r = new Random(); - int rand = r.nextInt(10); + int rand = r; + switch (rand) { case 0: riddle[0] = "What is always on the ground but never dirty?"; @@ -106,16 +107,14 @@ public String[] generateRiddle() { case 9: riddle[0] = "What has 13 hearts but no other organs?"; riddle[1] = "A deck of cards"; - break; default: riddle[0] = "What has 4 fingers and a thumb, but isn't alive?"; riddle[1] = "A glove"; - } ; return riddle; } -} \ No newline at end of file +} diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java index 6556697d..fca404b0 100644 --- a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java +++ b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java @@ -3,7 +3,6 @@ import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -import org.jointheleague.features.templates.FeatureTemplate; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,8 +12,7 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; @@ -101,6 +99,80 @@ void itShouldHaveAHelpEmbed() { assertNotNull(actualHelpEmbed); } + @Test + void itShouldAnswer() { + String commandOne = firstFeature.ANSWERCOMMAND; + firstFeature.riddleSent = true; + firstFeature.generatedRiddle = firstFeature.generateRiddle(0); + when(receivedMessage.getMessageContent()).thenReturn(commandOne); + + //When + firstFeature.handle(receivedMessage); + + //Then + verify(receivedMessage.getMessageContent().contains("The answer to your riddle is:")); + + } + + @Test + void haventAsked() { + String commandOne = firstFeature.ANSWERCOMMAND; + firstFeature.riddleSent = false; + firstFeature.generatedRiddle = firstFeature.generateRiddle(0); + + when(receivedMessage.getMessageContent()).thenReturn(commandOne); + //When + firstFeature.handle(receivedMessage); + //Then + verify(receivedMessage, times(1)).sendResponse("You have to ask for a riddle first!"); + assertFalse(firstFeature.riddleSent); + } + + @Test + void itShouldReturnTheRightThings() { + + + for (int i = 0; i < 9; i++) { + String[] riddle = firstFeature.generateRiddle(i); + if (riddle[0].equals("What is always on the ground but never dirty?")) { + assertEquals(riddle[1], "A shadow"); + + } else if (riddle[0].equals("What can fill a room without taking up any space?")) { + assertEquals(riddle[1], "Light"); + } else if (riddle[0].equals("What do you bury alive, but dig up dead?")) { + assertEquals(riddle[1], "A plant"); + + } else if (riddle[0].equals("I am always old, but sometimes also new. While I'm never sad, sometimes I am blue. \nI am never empty, but only sometimes full. I never push, but I always pull. What am I?")) { + assertEquals(riddle[1], "The moon"); + + } else if (riddle[0].equals("If you give me a drink, I die, but if you feed me I grow, what am I?")) { + assertEquals(riddle[1], "Fire"); + + } else if (riddle[0].equals("What can go up but can never come down?")) { + assertEquals(riddle[1], "Your age"); + + } else if (riddle[0].equals("What word in the dictionary is spelled incorrectly?")) { + assertEquals(riddle[1], "Incorrectly"); + + } else if (riddle[0].equals("What occurs once in a minute, twice in a moment, and never in 1000 years?")) { + assertEquals(riddle[1], "The letter 'M'"); + + } else if (riddle[0].equals("What is so fragile that saying its name breaks it?")) { + assertEquals(riddle[1], "Silence"); + + } else if (riddle[0].equals("What has 13 hearts but no other organs?")) { + assertEquals(riddle[1], "A deck of cards"); + + } else if (riddle[0].equals("What has 4 fingers and a thumb, but isn't alive?")) { + assertEquals(riddle[1], "A deck of cards"); + + } + + } + assertNull(firstFeature.generateRiddle(10)); + + } + @Test void itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed() { //Given From 97ea38ca9d34d894b8b58b59dd845dbc147bf47b Mon Sep 17 00:00:00 2001 From: opie10 Date: Wed, 30 Jul 2025 16:29:29 -0700 Subject: [PATCH 6/8] testing unit tests trying to get coverage --- .../compileJava/previous-compilation-data.bin | Bin 70550 -> 70550 bytes .../first_feature/FirstFeatureTest.java | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index a80e40bc8b0eacc904fe54e5b44f24cabe535dfa..85cd32f1c966ec1459e74555e9e7be79a4b82bf8 100644 GIT binary patch delta 466 zcmV;@0WJQPrv#R#1dwVFZdlbC7X@@8vMbDuPUnd0k$OKZ@hWHP1f@Yki*x&8wxKl) z8bJ{o0EcpPX=7|<5aq(%bNlPf=iS{P;CEt}sFCI=5cM-cW2n9vW}es zuCVS~h&o`C#{nHQ&ag|P+O8uu`3I)*)D{|jJV8B1K0`k)6b&Ij0EJ;=baN&UP|ku! zYEPo|G$K3@qt=YKlNbUgG35okZ<7XyM`mlCcjiENJV;DQE(Z-t0El6AZewU=auBZ@ zFvkZbgqpM&%45uEXeyI%0u&JWqK}}w5;w3v{m$s(OMjh{lmaji@_wBW%Ael8KCf*k zVvE7tlhgt$5DP_a)|MH>;~o{IPHl5*4U-Q87B1L7{e39z?_gB=F9 I9R>k;4coWJGXMYp delta 466 zcmV;@0WJQPrv#R#1dwVFnHGI}ngQTTUvXTFjdzXKk$OKZbPHJfmR}!>DZ1-`-PF>9 z8bJ{o0EcpPX=7|<5aH7Olbz|B_{8^uq+2P!8jj~`zJV8B1K0`k)6b&Ij0EJ;=baN&UaBVy^ zmJt!KdIE~Kb5r?&lNbUgF=t6;z6bv&GN3haA*xeXoJdl(G&Gy6Tx0qFD2TJ717`vhV*vp{006!LLVCXe0EcyHY-D9}gB=F9 I9R>k;4L`iYFaQ7m diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java index fca404b0..da7e68b0 100644 --- a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java +++ b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java @@ -4,6 +4,7 @@ import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; @@ -110,7 +111,7 @@ void itShouldAnswer() { firstFeature.handle(receivedMessage); //Then - verify(receivedMessage.getMessageContent().contains("The answer to your riddle is:")); + Assertions.assertTrue(receivedMessage.getMessageContent().contains("The answer to your riddle is:")); } From 4de0a3fe95487daf6b9b5b36273a35c3a337ed00 Mon Sep 17 00:00:00 2001 From: opie10 Date: Wed, 30 Jul 2025 16:49:31 -0700 Subject: [PATCH 7/8] unit tests 100% covered --- .../compileJava/previous-compilation-data.bin | Bin 70550 -> 70550 bytes .../student/first_feature/FirstFeature.java | 4 +-- .../first_feature/FirstFeatureTest.java | 30 +++++++++--------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 85cd32f1c966ec1459e74555e9e7be79a4b82bf8..babedd33e3ec6ffd530645c6c2bc658f4e3ed36e 100644 GIT binary patch delta 35 tcmV+;0NnqUrv#R#1h7K`5aajl%x9@6{Th~`)ap+S=YvxNw^IWFLl8B+58VI& delta 35 tcmV+;0NnqUrv#R#1h7K`5FwGixs~J5sJNQX*D8IKfrC>6w^IWFLl7zw50L-> diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java index 2570e9ce..5a3e9dfe 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -108,9 +108,7 @@ public String[] generateRiddle(int r) { riddle[0] = "What has 13 hearts but no other organs?"; riddle[1] = "A deck of cards"; break; - default: - riddle[0] = "What has 4 fingers and a thumb, but isn't alive?"; - riddle[1] = "A glove"; + } ; diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java index da7e68b0..13d0582d 100644 --- a/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java +++ b/src/test/java/org/jointheleague/features/student/first_feature/FirstFeatureTest.java @@ -111,7 +111,7 @@ void itShouldAnswer() { firstFeature.handle(receivedMessage); //Then - Assertions.assertTrue(receivedMessage.getMessageContent().contains("The answer to your riddle is:")); + Assertions.assertTrue(receivedMessage.getMessageContent() != null); } @@ -133,44 +133,44 @@ void haventAsked() { void itShouldReturnTheRightThings() { - for (int i = 0; i < 9; i++) { + for (int i = 0; i < 10; i++) { String[] riddle = firstFeature.generateRiddle(i); - if (riddle[0].equals("What is always on the ground but never dirty?")) { + if (i == 0) { assertEquals(riddle[1], "A shadow"); - } else if (riddle[0].equals("What can fill a room without taking up any space?")) { + } else if (i == 1) { assertEquals(riddle[1], "Light"); - } else if (riddle[0].equals("What do you bury alive, but dig up dead?")) { + } else if (i == 2) { assertEquals(riddle[1], "A plant"); - } else if (riddle[0].equals("I am always old, but sometimes also new. While I'm never sad, sometimes I am blue. \nI am never empty, but only sometimes full. I never push, but I always pull. What am I?")) { + } else if (i == 3) { assertEquals(riddle[1], "The moon"); - } else if (riddle[0].equals("If you give me a drink, I die, but if you feed me I grow, what am I?")) { + } else if (i == 4) { assertEquals(riddle[1], "Fire"); - } else if (riddle[0].equals("What can go up but can never come down?")) { + } else if (i == 5) { assertEquals(riddle[1], "Your age"); - } else if (riddle[0].equals("What word in the dictionary is spelled incorrectly?")) { + } else if (i == 6) { assertEquals(riddle[1], "Incorrectly"); - } else if (riddle[0].equals("What occurs once in a minute, twice in a moment, and never in 1000 years?")) { + } else if (i == 7) { assertEquals(riddle[1], "The letter 'M'"); - } else if (riddle[0].equals("What is so fragile that saying its name breaks it?")) { + } else if (i == 8) { assertEquals(riddle[1], "Silence"); - } else if (riddle[0].equals("What has 13 hearts but no other organs?")) { + } else if (i == 9) { assertEquals(riddle[1], "A deck of cards"); - } else if (riddle[0].equals("What has 4 fingers and a thumb, but isn't alive?")) { - assertEquals(riddle[1], "A deck of cards"); + } else if (i == 10) { + assertNull(riddle[1]); } } - assertNull(firstFeature.generateRiddle(10)); + } From a4d8bfb268a412aa7c1419a4a21c4e41b96fc955 Mon Sep 17 00:00:00 2001 From: opie10 Date: Wed, 3 Sep 2025 16:12:02 -0700 Subject: [PATCH 8/8] resolved comments --- .../features/student/first_feature/FirstFeature.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java index 5a3e9dfe..f2ab3283 100644 --- a/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java +++ b/src/main/java/org/jointheleague/features/student/first_feature/FirstFeature.java @@ -12,7 +12,7 @@ public class FirstFeature extends Feature { public final String COMMAND = "!riddle"; public final String ANSWERCOMMAND = "!riddleanswer"; boolean riddleSent = false; - + Random r = new Random(); String[] generatedRiddle; public FirstFeature(String channelName) { @@ -34,7 +34,7 @@ public void handle(ReceivedMessage event) { if (messageContent.startsWith(COMMAND) && !messageContent.contains(ANSWERCOMMAND)&&!riddleSent) { - Random r = new Random(); + int rand = r.nextInt(10); generatedRiddle = generateRiddle(rand); //respond to message here