diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchPagingTest.java b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchPagingTest.java new file mode 100644 index 00000000..b4596633 --- /dev/null +++ b/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/search/YoutubeSearchPagingTest.java @@ -0,0 +1,78 @@ +package org.schabi.newpipe.extractor.services.youtube.search; + +import static java.util.Collections.singletonList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.schabi.newpipe.extractor.ServiceList.YouTube; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.schabi.newpipe.DownloaderTestImpl; +import org.schabi.newpipe.extractor.InfoItem; +import org.schabi.newpipe.extractor.ListExtractor; +import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeSearchExtractor; +import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory; + +public class YoutubeSearchPagingTest { + private static ListExtractor.InfoItemsPage page1; + private static ListExtractor.InfoItemsPage page2; + private static Set urlList1; + private static Set urlList2; + + @BeforeClass + public static void setUpClass() throws Exception { + NewPipe.init(DownloaderTestImpl.getInstance()); + + YoutubeSearchExtractor extractor = (YoutubeSearchExtractor) YouTube.getSearchExtractor("cirque du soleil", + singletonList(YoutubeSearchQueryHandlerFactory.VIDEOS), null); + + extractor.fetchPage(); + page1 = extractor.getInitialPage(); + urlList1 = extractUrls(page1.getItems()); + assertEquals("page with items loaded", 20, page1.getItems().size()); + assertEquals("distinct videos", 20, urlList1.size()); + + assertTrue("has more page", page1.hasNextPage()); + assertNotNull("has next page url", page1.getNextPageUrl()); + page2 = extractor.getPage(page1.getNextPageUrl()); + urlList2 = extractUrls(page2.getItems()); + } + + private static Set extractUrls(List list) { + Set result = new HashSet<>(); + for (InfoItem item : list) { + result.add(item.getUrl()); + } + return result; + } + + @Test + public void firstPageOk() { + assertEquals("page with items loaded", 20, page1.getItems().size()); + assertEquals("distinct videos", 20, urlList1.size()); + } + + @Test + public void secondPageLength() { + assertEquals("one page", 20, page2.getItems().size()); + } + + @Test + public void secondPageUniqueVideos() { + assertEquals("distinct videos", 20, urlList2.size()); + } + + @Test + public void noRepeatingVideosInPages() { + Set intersection = new HashSet<>(urlList2); + intersection.retainAll(urlList1); + assertEquals("empty intersection", 0, intersection.size()); + } + +} \ No newline at end of file