From 395c3b67eece8e85fe7d05de663263e78c25f956 Mon Sep 17 00:00:00 2001 From: jclc Date: Mon, 27 Jun 2016 11:25:24 +0300 Subject: [PATCH 1/2] setup method --- .../fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java b/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java index 4624e66e..fde290e6 100644 --- a/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java +++ b/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java @@ -2,6 +2,7 @@ import fi.helsinki.cs.tmc.cli.io.ExternalsUtil; +import org.junit.Before; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -10,4 +11,8 @@ @PrepareForTest(ExternalsUtil.class) public class FeedbackHandlerTest { + @Before + public void setup() { + + } } From 76c8a8672dc6ed1773c68296b7fc640d81829fa2 Mon Sep 17 00:00:00 2001 From: jclc Date: Mon, 27 Jun 2016 14:35:42 +0300 Subject: [PATCH 2/2] feedback tests --- .../fi/helsinki/cs/tmc/cli/io/TestIo.java | 4 + .../tmc/cli/tmcstuff/FeedbackHandlerTest.java | 77 ++++++++++++++++++- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/src/test/java/fi/helsinki/cs/tmc/cli/io/TestIo.java b/src/test/java/fi/helsinki/cs/tmc/cli/io/TestIo.java index d385d94a..3b766de8 100644 --- a/src/test/java/fi/helsinki/cs/tmc/cli/io/TestIo.java +++ b/src/test/java/fi/helsinki/cs/tmc/cli/io/TestIo.java @@ -89,18 +89,22 @@ public void print(String str) { @Override public String readLine(String prompt) { usePrompt(PromptType.TEXT_PROMPT); + this.printedText.append(prompt + "\n"); return textPrompts.pop(); } @Override public String readPassword(String prompt) { usePrompt(PromptType.PASSWORD_PROMPT); + this.printedText.append(prompt + "\n"); return passwordPrompts.pop(); } @Override public boolean readConfirmation(String prompt, boolean defaultToYes) { usePrompt(PromptType.CONFIRM_PROMPT); + String yesNo = (defaultToYes) ? " [Y/n] " : " [y/N] "; + this.printedText.append(prompt + yesNo); return (boolean) confirmationPrompts.pop(); } diff --git a/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java b/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java index 9d3d48eb..251c7512 100644 --- a/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java +++ b/src/test/java/fi/helsinki/cs/tmc/cli/tmcstuff/FeedbackHandlerTest.java @@ -1,19 +1,92 @@ package fi.helsinki.cs.tmc.cli.tmcstuff; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.powermock.api.mockito.PowerMockito.mockStatic; +import static org.powermock.api.mockito.PowerMockito.verifyStatic; +import static org.powermock.api.mockito.PowerMockito.when; + +import fi.helsinki.cs.tmc.cli.CliContext; import fi.helsinki.cs.tmc.cli.io.ExternalsUtil; +import fi.helsinki.cs.tmc.cli.io.TestIo; +import fi.helsinki.cs.tmc.core.domain.submission.FeedbackAnswer; +import fi.helsinki.cs.tmc.core.domain.submission.FeedbackQuestion; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.net.URI; +import java.util.Arrays; +import java.util.List; + @RunWith(PowerMockRunner.class) -@PrepareForTest(ExternalsUtil.class) +@PrepareForTest({ExternalsUtil.class, TmcUtil.class}) public class FeedbackHandlerTest { + private List questions; + private String a1; + private String a2; + private String a3; + private TestIo io; + private CliContext ctx; + @Captor ArgumentCaptor> answerCaptor; @Before public void setup() { - + a1 = a2 = a3 = ""; + mockStatic(ExternalsUtil.class); + mockStatic(TmcUtil.class); + when(ExternalsUtil.getUserEditedMessage(anyString(), anyString(), anyBoolean())) + .thenReturn("you're programm sucks"); + FeedbackQuestion q1 = new FeedbackQuestion(); + q1.setQuestion("What's your opinion on TMC-CLI?"); + q1.setKind("text"); + FeedbackQuestion q2 = new FeedbackQuestion(); + q2.setQuestion("Please rate this program."); + q2.setKind("intrange\\[0\\.\\.4]"); + FeedbackQuestion q3 = new FeedbackQuestion(); + q3.setQuestion("This type of question doesn't really exist but whatever"); + q3.setKind("misc"); + questions = Arrays.asList(q1, q2, q3); + io = new TestIo(); + ctx = mock(CliContext.class); + Mockito.when(ctx.getIo()).thenReturn(io); + } + + @Test + public void sendingFeedbackWorks() { + PowerMockito.when( + TmcUtil.sendFeedback(any(CliContext.class), any(List.class), any(URI.class))) + .thenReturn(true); + io.addLinePrompt("1"); + io.addLinePrompt("who cars"); + io.addConfirmationPrompt(true); + FeedbackHandler handler = new FeedbackHandler(ctx); + handler.sendFeedback(questions, URI.create("https://eeeeeeeeeee.com")); + + verifyStatic(); + TmcUtil.sendFeedback(any(CliContext.class), answerCaptor.capture(), any(URI.class)); + List answers = answerCaptor.getValue(); + assertThat(answers.get(0).getQuestion().getQuestion()).isEqualTo( + "What's your opinion on TMC-CLI?"); + assertThat(answers.get(0).getAnswer()).isEqualTo("you're programm sucks"); + io.assertContains("Please rate this program."); + assertThat(answers.get(1).getQuestion().getQuestion()).isEqualTo( + "Please rate this program."); + assertThat(answers.get(1).getAnswer()).isEqualTo("1"); + io.assertContains( + "Feedback question: This type of question doesn't really exist but whatever"); + assertThat(answers.get(2).getQuestion().getQuestion()).isEqualTo( + "This type of question doesn't really exist but whatever"); + assertThat(answers.get(2).getAnswer()).isEqualTo("who cars"); } }