package org.liberty.android.fantastischmemo.test.queue;
import android.support.test.filters.SmallTest;
import org.junit.Test;
import org.liberty.android.fantastischmemo.dao.CardDao;
import org.liberty.android.fantastischmemo.entity.Card;
import org.liberty.android.fantastischmemo.entity.Category;
import org.liberty.android.fantastischmemo.queue.QueueManager;
import org.liberty.android.fantastischmemo.queue.QuizQueueManager;
import org.liberty.android.fantastischmemo.scheduler.Scheduler;
import org.liberty.android.fantastischmemo.test.AbstractExistingDBTest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class QuizQueuingManagerTest extends AbstractExistingDBTest {
@SmallTest
@Test
public void testFilterCategory() throws Exception {
CardDao cardDao = helper.getCardDao();
Card c10 = cardDao.queryForId(10);
assertNotNull(c10);
Category cat = new Category();
cat.setName("tt");
c10.setCategory(cat);
cardDao.update(c10);
QueueManager queueManager = new QuizQueueManager.Builder()
.setDbOpenHelper(helper)
.setFilterCategory(cat)
.build();
Card cqueue = queueManager.dequeue();
assertEquals(10, (int)cqueue.getId());
}
@SmallTest
@Test
public void testFilterByGroup() throws Exception {
// Create a quiz start the quiz size 3 from card 5
QueueManager queueManager = new QuizQueueManager.Builder()
.setDbOpenHelper(helper)
.setQuizSize(3)
.setStartCardOrd(5)
.build();
Card card5 = queueManager.dequeue();
queueManager.remove(card5);
assertEquals(5, (int)card5.getOrdinal());
Card card6 = queueManager.dequeue();
queueManager.remove(card6);
assertEquals(6, (int)card6.getOrdinal());
Card card7 = queueManager.dequeue();
queueManager.remove(card7);
assertEquals(7, (int)card7.getOrdinal());
// No cards in the queue
Card nullCard= queueManager.dequeue();
assertNull(nullCard);
}
@SmallTest
@Test
public void testUpdateCard() throws Exception {
Scheduler mockScheduler = mock(Scheduler.class);
// Create a quiz start the quiz size 3 from card 5
QueueManager queueManager = new QuizQueueManager.Builder()
.setDbOpenHelper(helper)
.setQuizSize(3)
.setStartCardOrd(5)
.setScheduler(mockScheduler)
.build();
Card card5 = queueManager.dequeue();
queueManager.remove(card5);
assertEquals(5, (int)card5.getOrdinal());
when(mockScheduler.isCardLearned(card5.getLearningData()))
.thenReturn(true);
queueManager.update(card5);
Card card6 = queueManager.dequeue();
queueManager.remove(card6);
assertEquals(6, (int)card6.getOrdinal());
when(mockScheduler.isCardLearned(card6.getLearningData()))
.thenReturn(false);
queueManager.update(card6);
Card card7 = queueManager.dequeue();
queueManager.remove(card7);
assertEquals(7, (int)card7.getOrdinal());
when(mockScheduler.isCardLearned(card7.getLearningData()))
.thenReturn(true);
queueManager.update(card7);
// Now cards in the queue is the card we failed
// and we succeed this time
Card card6Again = queueManager.dequeue();
queueManager.remove(card6Again);
assertEquals(6, (int)card6Again.getOrdinal());
when(mockScheduler.isCardLearned(card6.getLearningData()))
.thenReturn(true);
queueManager.update(card6Again);
// No cards in the queue
Card nullCard= queueManager.dequeue();
assertNull(nullCard);
}
}