Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/test/java/fi/helsinki/cs/tmc/cli/io/TestIo.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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.Ignore;
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<FeedbackQuestion> questions;
private String a1;
private String a2;
private String a3;
private TestIo io;
private CliContext ctx;
@Captor ArgumentCaptor<List<FeedbackAnswer>> 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);
}

@Ignore
@Test
public void todo() {
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<FeedbackAnswer> 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");
}
}