package tests; import models.Answer; import models.Comment; import models.Question; import models.User; import models.database.IDatabase; import models.database.HotDatabase.HotDatabase; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import play.test.FunctionalTest; import tests.mocks.SessionMock; import controllers.CAnswer; import controllers.CQuestion; import controllers.Database; import controllers.Session; @Ignore public class UserInteractionTest extends FunctionalTest { private User jack; private SessionMock session; private IDatabase origDB; @Before public void setUp() { jack = new User("Jack"); session = new SessionMock(); session.loginAs(jack); Session.mockWith(session); origDB = Database.swapWith(new HotDatabase()); } @After public void tearDown() { Database.swapWith(origDB); } @Test public void shouldPostQuestion() { // Response response = POST("/","","why?"); // assertStatus(302,response); // Question question = null; // for (Question q :Question.questions()) { // if (q.owner().equals(jack)) // question = q; // } controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); assertNotNull(question); assertEquals(question.owner(), jack); assertTrue(Database.questions().all().contains(question)); } @Test public void shouldPostAnswer() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CAnswer.newAnswer(question.id(), "nevermind"); Answer answer = question.answers().get(0); assertNotNull(answer); assertEquals(answer.owner(), jack); assertTrue(question.answers().contains(answer)); } @Test public void shouldPostComment() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); controllers.CQuestion.newCommentQuestion(question.id(), "Could I specify?"); Comment comment = question.comments().get(0); assertNotNull(comment); assertEquals(comment.owner(), jack); assertTrue(question.comments().contains(comment)); } @Test public void shouldPostAnswerComment() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CAnswer.newAnswer(question.id(), "nevermind"); Answer answer = question.answers().get(0); controllers.CAnswer.newCommentAnswer(question.id(), answer.id(), "Good Point"); Comment comment = answer.getComment(0); assertNotNull(comment); assertEquals(comment.owner(), jack); assertTrue(answer.comments().contains(comment)); } @Test public void shouldVoteQuestion() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); User jill = new User("Jill"); session.loginAs(jill); CQuestion.voteQuestionDown(question.id()); assertEquals(-1, question.rating()); CQuestion.voteQuestionUp(question.id()); assertEquals(1, question.rating()); } @Test public void shouldVoteAnswer() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CAnswer.newAnswer(question.id(), "nevermind"); Answer answer = question.answers().get(0); User jill = new User("Jill"); session.loginAs(jill); CAnswer.voteAnswerDown(question.id(), answer.id()); assertEquals(-1, answer.rating()); controllers.CAnswer.voteAnswerUp(question.id(), answer.id()); assertEquals(1, answer.rating()); } @Test public void shouldDeleteQuestion() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CQuestion.deleteQuestion(question.id()); assertFalse(Database.questions().all().contains(question)); } @Test public void shouldDeleteAnswer() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CAnswer.newAnswer(question.id(), "nevermind"); Answer answer = question.answers().get(0); CQuestion.deleteQuestion(answer.id()); assertFalse(question.answers().contains(question)); } @Test public void shouldDeleteQuestionComment() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); controllers.CQuestion.newCommentQuestion(question.id(), "Could I specify?"); Comment comment = question.comments().get(0); CQuestion.deleteCommentQuestion(comment.id(), question.id()); assertFalse(question.comments().contains(question)); } @Test public void shouldDeleteAnswerComment() { controllers.CQuestion.newQuestion("why?", "stupid"); Question question = Database.questions().searchFor("why").get(0); CAnswer.newAnswer(question.id(), "nevermind"); Answer answer = question.getAnswer(0); controllers.CAnswer.newCommentAnswer(answer.id(), question.id(), "Could I specify?"); Comment comment = answer.getComment(0); CAnswer.deleteCommentAnswer(comment.id(), question.id(), answer.id()); assertFalse(answer.comments().contains(question)); } }