package tests; import java.util.List; import models.Answer; import models.Entry; import models.Question; import models.User; import models.database.IQuestionDatabase; import models.database.HotDatabase.HotQuestionDatabase; import org.junit.Before; import org.junit.Test; public class EntryOrderingTest extends MockedUnitTest { private Question badQuestion; private Question goodQuestion; private Answer badAnswer; private Answer notQuiteAsBadAnswer; private Answer goodAnswer; private Answer bestAnswer; private User jack; private IQuestionDatabase questionDB; @Before public void setUp() { this.questionDB = new HotQuestionDatabase(null); jack = new User("jack"); badQuestion = this.questionDB.add(jack, "bad"); goodQuestion = this.questionDB.add(jack, "good"); badAnswer = badQuestion.answer(jack, ""); notQuiteAsBadAnswer = badQuestion.answer(jack, ""); goodAnswer = badQuestion.answer(jack, ""); bestAnswer = badQuestion.answer(jack, ""); voteDownNTimes(badQuestion, 5); voteUpNTimes(goodQuestion, 2); voteUpNTimes(goodAnswer, 10); voteUpNTimes(bestAnswer, 5); badQuestion.setBestAnswer(bestAnswer); voteDownNTimes(notQuiteAsBadAnswer, 3); voteDownNTimes(badAnswer, 5); } private void voteUpNTimes(Entry entry, int n) { for (int i = 0; i < n; i++) { entry.voteUp(new User("user" + i)); } } private void voteDownNTimes(Entry entry, int n) { for (int i = 0; i < n; i++) { entry.voteDown(new User("user" + i)); } } @Test public void shouldPreferMoreRecentQuestionEventhoughTheyMightBeWorse() { // TODO: this doesn't do what the tests expects it to! List<Question> questions = this.questionDB.all(); assertEquals(goodQuestion, questions.get(0)); assertEquals(badQuestion, questions.get(1)); } @Test public void shouldPreferBestAnswerToGoodToBadToVeryBad() { List<Answer> answers = badQuestion.answers(); assertEquals(bestAnswer, answers.get(0)); assertEquals(goodAnswer, answers.get(1)); assertEquals(notQuiteAsBadAnswer, answers.get(2)); assertEquals(badAnswer, answers.get(3)); } }