package ca.ualberta.cs.cmput301f14t14.questionapp.test;
import java.io.IOException;
import java.util.UUID;
import android.test.ActivityInstrumentationTestCase2;
import ca.ualberta.cs.cmput301f14t14.questionapp.MainActivity;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.DataManager;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.LocalDataStore;
import ca.ualberta.cs.cmput301f14t14.questionapp.data.RemoteDataStore;
import ca.ualberta.cs.cmput301f14t14.questionapp.model.Answer;
import ca.ualberta.cs.cmput301f14t14.questionapp.model.Image;
import ca.ualberta.cs.cmput301f14t14.questionapp.model.Question;
public class AnswerTest extends ActivityInstrumentationTestCase2<MainActivity> {
private Question mQuestion;
private Answer mAnswer;
private DataManager manager;
private LocalDataStore local;
private RemoteDataStore remote;
public AnswerTest() {
super(MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
mQuestion = new Question("Title", "Body", "Author", null);
mAnswer = new Answer(mQuestion.getId(), "Answer body.", "Author", null);
manager = DataManager.getInstance(getInstrumentation().getTargetContext().getApplicationContext());
local = new LocalDataStore(getInstrumentation().getTargetContext().getApplicationContext());
remote = new RemoteDataStore(getInstrumentation().getTargetContext().getApplicationContext());
}
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* UC5 TC5.1 - Add an Answer normally
*/
public void testAddAnswer() {
assertFalse(mQuestion.hasAnswer(mAnswer.getId()));
mQuestion.addAnswer(mAnswer.getId());
assertTrue(mQuestion.hasAnswer(mAnswer.getId()));
}
/**
* UC5 TC5.2 - Invalid Answer body
*/
public void testInvalidBody() {
// Test invalid body
Image image = new Image(null);
try {
new Answer(mQuestion.getId(), null, "Author", image);
fail();
} catch (IllegalArgumentException ex) {
// Passed
}
try {
new Answer(mQuestion.getId(), "", "Author", image);
fail();
} catch (IllegalArgumentException ex) {
// Passed
}
}
/**
* UC5 TC5.3- Create Local Answer, and push
* to remote server on network restoration
*/
public void testLocalAnswerCreate() {
manager.addQuestion(mQuestion, null);
UUID qId = mQuestion.getId();
mQuestion.addAnswer(mAnswer.getId());
manager.addAnswer(mAnswer);
UUID aId = mAnswer.getId();
assertNotNull(manager.getAnswer(aId, null));
try {
remote.putAnswer(mAnswer);
remote.putQuestion(mQuestion);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//assertNotNull(remote.getAnswer(aId));
assertTrue(mQuestion.hasAnswer(mAnswer.getId()));
}
/**
* UC9 TC9.2- Upvote an Answer
*/
public void testUpvoteAnswer() {
int oldVotes = mAnswer.getUpvotes();
mAnswer.addUpvote();
int newVotes = mAnswer.getUpvotes();
assertEquals(oldVotes + 1, newVotes);
}
/**
* UC9 TC9.4- Multiple Upvotes on an Answer
*/
public void testMultipleUpvoteQuestion() {
int oldVotes = mAnswer.getUpvotes();
// notice multiple upvotes
mAnswer.addUpvote();
mAnswer.addUpvote();
mAnswer.addUpvote();
int newVotes = mAnswer.getUpvotes();
assertEquals(oldVotes + 1, newVotes);
}
}