| package de.test.antennapod.storage; |
| |
| import android.content.Context; |
| import android.test.InstrumentationTestCase; |
| |
| import java.util.ArrayList; |
| import java.util.Date; |
| import java.util.List; |
| import java.util.Random; |
| |
| import de.danoeh.antennapod.core.feed.Feed; |
| import de.danoeh.antennapod.core.feed.FeedItem; |
| import de.danoeh.antennapod.core.feed.FeedMedia; |
| import de.danoeh.antennapod.core.storage.DBReader; |
| import de.danoeh.antennapod.core.storage.FeedItemStatistics; |
| import de.danoeh.antennapod.core.storage.PodDBAdapter; |
| import de.danoeh.antennapod.core.util.LongList; |
| |
| import static de.test.antennapod.storage.DBTestUtils.saveFeedlist; |
| |
| /** |
| * Test class for DBReader |
| */ |
| public class DBReaderTest extends InstrumentationTestCase { |
| |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| assertTrue(PodDBAdapter.deleteDatabase()); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| // create new database |
| PodDBAdapter.deleteDatabase(); |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| adapter.close(); |
| } |
| |
| public void testGetFeedList() { |
| List<Feed> feeds = saveFeedlist(10, 0, false); |
| List<Feed> savedFeeds = DBReader.getFeedList(); |
| assertNotNull(savedFeeds); |
| assertEquals(feeds.size(), savedFeeds.size()); |
| for (int i = 0; i < feeds.size(); i++) { |
| assertTrue(savedFeeds.get(i).getId() == feeds.get(i).getId()); |
| } |
| } |
| |
| public void testGetFeedListSortOrder() { |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| |
| Feed feed1 = new Feed(0, null, "A", "link", "d", null, null, null, "rss", "A", null, "", "", true); |
| Feed feed2 = new Feed(0, null, "b", "link", "d", null, null, null, "rss", "b", null, "", "", true); |
| Feed feed3 = new Feed(0, null, "C", "link", "d", null, null, null, "rss", "C", null, "", "", true); |
| Feed feed4 = new Feed(0, null, "d", "link", "d", null, null, null, "rss", "d", null, "", "", true); |
| adapter.setCompleteFeed(feed1); |
| adapter.setCompleteFeed(feed2); |
| adapter.setCompleteFeed(feed3); |
| adapter.setCompleteFeed(feed4); |
| assertTrue(feed1.getId() != 0); |
| assertTrue(feed2.getId() != 0); |
| assertTrue(feed3.getId() != 0); |
| assertTrue(feed4.getId() != 0); |
| |
| adapter.close(); |
| |
| List<Feed> saved = DBReader.getFeedList(); |
| assertNotNull(saved); |
| assertEquals("Wrong size: ", 4, saved.size()); |
| |
| assertEquals("Wrong id of feed 1: ", feed1.getId(), saved.get(0).getId()); |
| assertEquals("Wrong id of feed 2: ", feed2.getId(), saved.get(1).getId()); |
| assertEquals("Wrong id of feed 3: ", feed3.getId(), saved.get(2).getId()); |
| assertEquals("Wrong id of feed 4: ", feed4.getId(), saved.get(3).getId()); |
| } |
| |
| public void testFeedListDownloadUrls() { |
| List<Feed> feeds = saveFeedlist(10, 0, false); |
| List<String> urls = DBReader.getFeedListDownloadUrls(); |
| assertNotNull(urls); |
| assertTrue(urls.size() == feeds.size()); |
| for (int i = 0; i < urls.size(); i++) { |
| assertEquals(urls.get(i), feeds.get(i).getDownload_url()); |
| } |
| } |
| |
| public void testLoadFeedDataOfFeedItemlist() { |
| final Context context = getInstrumentation().getTargetContext(); |
| final int numFeeds = 10; |
| final int numItems = 1; |
| List<Feed> feeds = saveFeedlist(numFeeds, numItems, false); |
| List<FeedItem> items = new ArrayList<>(); |
| for (Feed f : feeds) { |
| for (FeedItem item : f.getItems()) { |
| item.setFeed(null); |
| item.setFeedId(f.getId()); |
| items.add(item); |
| } |
| } |
| DBReader.loadAdditionalFeedItemListData(items); |
| for (int i = 0; i < numFeeds; i++) { |
| for (int j = 0; j < numItems; j++) { |
| FeedItem item = feeds.get(i).getItems().get(j); |
| assertNotNull(item.getFeed()); |
| assertTrue(item.getFeed().getId() == feeds.get(i).getId()); |
| assertTrue(item.getFeedId() == item.getFeed().getId()); |
| } |
| } |
| } |
| |
| public void testGetFeedItemList() { |
| final int numFeeds = 1; |
| final int numItems = 10; |
| Feed feed = saveFeedlist(numFeeds, numItems, false).get(0); |
| List<FeedItem> items = feed.getItems(); |
| feed.setItems(null); |
| List<FeedItem> savedItems = DBReader.getFeedItemList(feed); |
| assertNotNull(savedItems); |
| assertTrue(savedItems.size() == items.size()); |
| for (int i = 0; i < savedItems.size(); i++) { |
| assertTrue(items.get(i).getId() == savedItems.get(i).getId()); |
| } |
| } |
| |
| private List<FeedItem> saveQueue(int numItems) { |
| if (numItems <= 0) { |
| throw new IllegalArgumentException("numItems<=0"); |
| } |
| List<Feed> feeds = saveFeedlist(numItems, numItems, false); |
| List<FeedItem> allItems = new ArrayList<>(); |
| for (Feed f : feeds) { |
| allItems.addAll(f.getItems()); |
| } |
| // take random items from every feed |
| Random random = new Random(); |
| List<FeedItem> queue = new ArrayList<>(); |
| while (queue.size() < numItems) { |
| int index = random.nextInt(numItems); |
| if (!queue.contains(allItems.get(index))) { |
| queue.add(allItems.get(index)); |
| } |
| } |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| adapter.setQueue(queue); |
| adapter.close(); |
| return queue; |
| } |
| |
| public void testGetQueueIDList() { |
| final int numItems = 10; |
| List<FeedItem> queue = saveQueue(numItems); |
| LongList ids = DBReader.getQueueIDList(); |
| assertNotNull(ids); |
| assertTrue(queue.size() == ids.size()); |
| for (int i = 0; i < queue.size(); i++) { |
| assertTrue(ids.get(i) != 0); |
| assertTrue(queue.get(i).getId() == ids.get(i)); |
| } |
| } |
| |
| public void testGetQueue() { |
| final int numItems = 10; |
| List<FeedItem> queue = saveQueue(numItems); |
| List<FeedItem> savedQueue = DBReader.getQueue(); |
| assertNotNull(savedQueue); |
| assertTrue(queue.size() == savedQueue.size()); |
| for (int i = 0; i < queue.size(); i++) { |
| assertTrue(savedQueue.get(i).getId() != 0); |
| assertTrue(queue.get(i).getId() == savedQueue.get(i).getId()); |
| } |
| } |
| |
| private List<FeedItem> saveDownloadedItems(int numItems) { |
| if (numItems <= 0) { |
| throw new IllegalArgumentException("numItems<=0"); |
| } |
| List<Feed> feeds = saveFeedlist(numItems, numItems, true); |
| List<FeedItem> items = new ArrayList<>(); |
| for (Feed f : feeds) { |
| items.addAll(f.getItems()); |
| } |
| List<FeedItem> downloaded = new ArrayList<>(); |
| Random random = new Random(); |
| |
| while (downloaded.size() < numItems) { |
| int i = random.nextInt(numItems); |
| if (!downloaded.contains(items.get(i))) { |
| FeedItem item = items.get(i); |
| item.getMedia().setDownloaded(true); |
| item.getMedia().setFile_url("file" + i); |
| downloaded.add(item); |
| } |
| } |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| adapter.setFeedItemlist(downloaded); |
| adapter.close(); |
| return downloaded; |
| } |
| |
| public void testGetDownloadedItems() { |
| final int numItems = 10; |
| List<FeedItem> downloaded = saveDownloadedItems(numItems); |
| List<FeedItem> downloaded_saved = DBReader.getDownloadedItems(); |
| assertNotNull(downloaded_saved); |
| assertTrue(downloaded_saved.size() == downloaded.size()); |
| for (FeedItem item : downloaded_saved) { |
| assertNotNull(item.getMedia()); |
| assertTrue(item.getMedia().isDownloaded()); |
| assertNotNull(item.getMedia().getDownload_url()); |
| } |
| } |
| |
| private List<FeedItem> saveUnreadItems(int numItems) { |
| if (numItems <= 0) { |
| throw new IllegalArgumentException("numItems<=0"); |
| } |
| List<Feed> feeds = saveFeedlist(numItems, numItems, true); |
| List<FeedItem> items = new ArrayList<>(); |
| for (Feed f : feeds) { |
| items.addAll(f.getItems()); |
| } |
| List<FeedItem> unread = new ArrayList<>(); |
| Random random = new Random(); |
| |
| while (unread.size() < numItems) { |
| int i = random.nextInt(numItems); |
| if (!unread.contains(items.get(i))) { |
| FeedItem item = items.get(i); |
| item.setPlayed(false); |
| unread.add(item); |
| } |
| } |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| adapter.setFeedItemlist(unread); |
| adapter.close(); |
| return unread; |
| } |
| |
| public void testGetUnreadItemsList() { |
| final int numItems = 10; |
| |
| List<FeedItem> unread = saveUnreadItems(numItems); |
| List<FeedItem> unreadSaved = DBReader.getUnreadItemsList(); |
| assertNotNull(unreadSaved); |
| assertTrue(unread.size() == unreadSaved.size()); |
| for (FeedItem item : unreadSaved) { |
| assertFalse(item.isPlayed()); |
| } |
| } |
| |
| public void testGetNewItemIds() { |
| final int numItems = 10; |
| |
| List<FeedItem> unread = saveUnreadItems(numItems); |
| long[] unreadIds = new long[unread.size()]; |
| for (int i = 0; i < unread.size(); i++) { |
| unreadIds[i] = unread.get(i).getId(); |
| } |
| List<FeedItem> unreadSaved = DBReader.getUnreadItemsList(); |
| assertNotNull(unreadSaved); |
| assertTrue(unread.size() == unreadSaved.size()); |
| for(int i=0; i < unreadSaved.size(); i++) { |
| long savedId = unreadSaved.get(i).getId(); |
| boolean found = false; |
| for (long id : unreadIds) { |
| if (id == savedId) { |
| found = true; |
| break; |
| } |
| } |
| assertTrue(found); |
| } |
| } |
| |
| public void testGetPlaybackHistory() { |
| final int numItems = (DBReader.PLAYBACK_HISTORY_SIZE + 1) * 2; |
| final int playedItems = DBReader.PLAYBACK_HISTORY_SIZE + 1; |
| final int numReturnedItems = Math.min(playedItems, DBReader.PLAYBACK_HISTORY_SIZE); |
| final int numFeeds = 1; |
| |
| Feed feed = DBTestUtils.saveFeedlist(numFeeds, numItems, true).get(0); |
| long[] ids = new long[playedItems]; |
| |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| for (int i = 0; i < playedItems; i++) { |
| FeedMedia m = feed.getItems().get(i).getMedia(); |
| m.setPlaybackCompletionDate(new Date(i + 1)); |
| adapter.setFeedMediaPlaybackCompletionDate(m); |
| ids[ids.length - 1 - i] = m.getItem().getId(); |
| } |
| adapter.close(); |
| |
| List<FeedItem> saved = DBReader.getPlaybackHistory(); |
| assertNotNull(saved); |
| assertEquals("Wrong size: ", numReturnedItems, saved.size()); |
| for (int i = 0; i < numReturnedItems; i++) { |
| FeedItem item = saved.get(i); |
| assertNotNull(item.getMedia().getPlaybackCompletionDate()); |
| assertEquals("Wrong sort order: ", item.getId(), ids[i]); |
| } |
| } |
| |
| public void testGetFeedStatisticsCheckOrder() { |
| final int NUM_FEEDS = 10; |
| final int NUM_ITEMS = 10; |
| List<Feed> feeds = DBTestUtils.saveFeedlist(NUM_FEEDS, NUM_ITEMS, false); |
| List<FeedItemStatistics> statistics = DBReader.getFeedStatisticsList(); |
| assertNotNull(statistics); |
| assertEquals(feeds.size(), statistics.size()); |
| for (int i = 0; i < NUM_FEEDS; i++) { |
| assertEquals("Wrong entry at index " + i, feeds.get(i).getId(), statistics.get(i).getFeedID()); |
| } |
| } |
| |
| public void testGetNavDrawerDataQueueEmptyNoUnreadItems() { |
| final int NUM_FEEDS = 10; |
| final int NUM_ITEMS = 10; |
| List<Feed> feeds = DBTestUtils.saveFeedlist(NUM_FEEDS, NUM_ITEMS, true); |
| DBReader.NavDrawerData navDrawerData = DBReader.getNavDrawerData(); |
| assertEquals(NUM_FEEDS, navDrawerData.feeds.size()); |
| assertEquals(0, navDrawerData.numNewItems); |
| assertEquals(0, navDrawerData.queueSize); |
| } |
| |
| public void testGetNavDrawerDataQueueNotEmptyWithUnreadItems() { |
| final int NUM_FEEDS = 10; |
| final int NUM_ITEMS = 10; |
| final int NUM_QUEUE = 1; |
| final int NUM_NEW = 2; |
| List<Feed> feeds = DBTestUtils.saveFeedlist(NUM_FEEDS, NUM_ITEMS, true); |
| PodDBAdapter adapter = PodDBAdapter.getInstance(); |
| adapter.open(); |
| for (int i = 0; i < NUM_NEW; i++) { |
| FeedItem item = feeds.get(0).getItems().get(i); |
| item.setNew(); |
| adapter.setSingleFeedItem(item); |
| } |
| List<FeedItem> queue = new ArrayList<>(); |
| for (int i = 0; i < NUM_QUEUE; i++) { |
| FeedItem item = feeds.get(1).getItems().get(i); |
| queue.add(item); |
| } |
| adapter.setQueue(queue); |
| |
| adapter.close(); |
| |
| DBReader.NavDrawerData navDrawerData = DBReader.getNavDrawerData(); |
| assertEquals(NUM_FEEDS, navDrawerData.feeds.size()); |
| assertEquals(NUM_NEW, navDrawerData.numNewItems); |
| assertEquals(NUM_QUEUE, navDrawerData.queueSize); |
| } |
| |
| public void testGetFeedItemlistCheckChaptersFalse() throws Exception { |
| Context context = getInstrumentation().getTargetContext(); |
| List<Feed> feeds = DBTestUtils.saveFeedlist(10, 10, false, false, 0); |
| for (Feed feed : feeds) { |
| for (FeedItem item : feed.getItems()) { |
| assertFalse(item.hasChapters()); |
| } |
| } |
| } |
| |
| public void testGetFeedItemlistCheckChaptersTrue() throws Exception { |
| List<Feed> feeds = saveFeedlist(10, 10, false, true, 10); |
| for (Feed feed : feeds) { |
| for (FeedItem item : feed.getItems()) { |
| assertTrue(item.hasChapters()); |
| } |
| } |
| } |
| |
| public void testLoadChaptersOfFeedItemNoChapters() throws Exception { |
| List<Feed> feeds = saveFeedlist(1, 3, false, false, 0); |
| saveFeedlist(1, 3, false, true, 3); |
| for (Feed feed : feeds) { |
| for (FeedItem item : feed.getItems()) { |
| assertFalse(item.hasChapters()); |
| DBReader.loadChaptersOfFeedItem(item); |
| assertFalse(item.hasChapters()); |
| assertNull(item.getChapters()); |
| } |
| } |
| } |
| |
| public void testLoadChaptersOfFeedItemWithChapters() throws Exception { |
| final int NUM_CHAPTERS = 3; |
| DBTestUtils.saveFeedlist(1, 3, false, false, 0); |
| List<Feed> feeds = saveFeedlist(1, 3, false, true, NUM_CHAPTERS); |
| for (Feed feed : feeds) { |
| for (FeedItem item : feed.getItems()) { |
| assertTrue(item.hasChapters()); |
| DBReader.loadChaptersOfFeedItem(item); |
| assertTrue(item.hasChapters()); |
| assertNotNull(item.getChapters()); |
| assertEquals(NUM_CHAPTERS, item.getChapters().size()); |
| } |
| } |
| } |
| |
| public void testGetItemWithChapters() throws Exception { |
| final int NUM_CHAPTERS = 3; |
| List<Feed> feeds = saveFeedlist(1, 1, false, true, NUM_CHAPTERS); |
| FeedItem item1 = feeds.get(0).getItems().get(0); |
| FeedItem item2 = DBReader.getFeedItem(item1.getId()); |
| assertTrue(item2.hasChapters()); |
| assertEquals(item1.getChapters(), item2.getChapters()); |
| } |
| } |