Add tests for YouTube Music search
This commit is contained in:
		
							parent
							
								
									2b9b2a78e8
								
							
						
					
					
						commit
						eb48524411
					
				
					 3 changed files with 102 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -22,4 +22,10 @@ public class YoutubeParsingHelperTest {
 | 
			
		|||
        assertTrue("Hardcoded client version is not valid anymore",
 | 
			
		||||
                YoutubeParsingHelper.isHardcodedClientVersionValid());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testAreHardcodedYoutubeMusicKeysValid() throws IOException, ExtractionException {
 | 
			
		||||
        assertTrue("Hardcoded YouTube Music keys are not valid anymore",
 | 
			
		||||
                YoutubeParsingHelper.areHardcodedYoutubeMusicKeysValid());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
package org.schabi.newpipe.extractor.services.youtube.search;
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
import java.net.URL;
 | 
			
		||||
import java.net.URLDecoder;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import static java.util.Arrays.asList;
 | 
			
		||||
import static org.junit.Assert.assertEquals;
 | 
			
		||||
import static org.junit.Assert.assertFalse;
 | 
			
		||||
import static org.junit.Assert.assertTrue;
 | 
			
		||||
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
 | 
			
		||||
 | 
			
		||||
public class YoutubeSearchExtractorMusicTest extends YoutubeSearchExtractorBaseTest {
 | 
			
		||||
    @BeforeClass
 | 
			
		||||
    public static void setUpClass() throws Exception {
 | 
			
		||||
        NewPipe.init(DownloaderTestImpl.getInstance());
 | 
			
		||||
        extractor = (YoutubeSearchExtractor) YouTube.getSearchExtractor("mocromaniac",
 | 
			
		||||
                asList(YoutubeSearchQueryHandlerFactory.MUSIC_SONGS), null);
 | 
			
		||||
        extractor.fetchPage();
 | 
			
		||||
        itemsPage = extractor.getInitialPage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetSecondPage() throws Exception {
 | 
			
		||||
        YoutubeSearchExtractor secondExtractor = (YoutubeSearchExtractor) YouTube.getSearchExtractor("mocromaniac",
 | 
			
		||||
                asList(YoutubeSearchQueryHandlerFactory.MUSIC_SONGS), null);
 | 
			
		||||
        ListExtractor.InfoItemsPage<InfoItem> secondPage = secondExtractor.getPage(itemsPage.getNextPageUrl());
 | 
			
		||||
        assertTrue(Integer.toString(secondPage.getItems().size()),
 | 
			
		||||
                secondPage.getItems().size() > 10);
 | 
			
		||||
 | 
			
		||||
        // check if its the same result
 | 
			
		||||
        boolean equals = true;
 | 
			
		||||
        for (int i = 0; i < secondPage.getItems().size()
 | 
			
		||||
                && i < itemsPage.getItems().size(); i++) {
 | 
			
		||||
            if (!secondPage.getItems().get(i).getUrl().equals(
 | 
			
		||||
                    itemsPage.getItems().get(i).getUrl())) {
 | 
			
		||||
                equals = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        assertFalse("First and second page are equal", equals);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUrl() throws Exception {
 | 
			
		||||
        assertTrue(extractor.getUrl(), extractor.getUrl().startsWith("https://music.youtube.com/search?q="));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetSecondPageUrl() throws Exception {
 | 
			
		||||
        URL url = new URL(extractor.getNextPageUrl());
 | 
			
		||||
 | 
			
		||||
        assertEquals(url.getHost(), "music.youtube.com");
 | 
			
		||||
        assertEquals(url.getPath(), "/youtubei/v1/search");
 | 
			
		||||
 | 
			
		||||
        Map<String, String> queryPairs = new LinkedHashMap<>();
 | 
			
		||||
        for (String queryPair : url.getQuery().split("&")) {
 | 
			
		||||
            int index = queryPair.indexOf("=");
 | 
			
		||||
            queryPairs.put(URLDecoder.decode(queryPair.substring(0, index), "UTF-8"),
 | 
			
		||||
                    URLDecoder.decode(queryPair.substring(index + 1), "UTF-8"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        assertEquals(queryPairs.get("ctoken"), queryPairs.get("continuation"));
 | 
			
		||||
        assertTrue(queryPairs.get("continuation").length() > 5);
 | 
			
		||||
        assertTrue(queryPairs.get("itct").length() > 5);
 | 
			
		||||
        assertEquals("json", queryPairs.get("alt"));
 | 
			
		||||
        assertTrue(queryPairs.get("key").length() > 5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -16,6 +16,12 @@ public class YoutubeSearchQHTest {
 | 
			
		|||
        assertEquals("https://www.youtube.com/results?search_query=Poifj%26jaijf", YouTube.getSearchQHFactory().fromQuery("Poifj&jaijf").getUrl());
 | 
			
		||||
        assertEquals("https://www.youtube.com/results?search_query=G%C3%BCl%C3%BCm", YouTube.getSearchQHFactory().fromQuery("Gülüm").getUrl());
 | 
			
		||||
        assertEquals("https://www.youtube.com/results?search_query=%3Fj%24%29H%C2%A7B", YouTube.getSearchQHFactory().fromQuery("?j$)H§B").getUrl());
 | 
			
		||||
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=asdf", YouTube.getSearchQHFactory().fromQuery("asdf", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=hans", YouTube.getSearchQHFactory().fromQuery("hans", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=Poifj%26jaijf", YouTube.getSearchQHFactory().fromQuery("Poifj&jaijf", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=G%C3%BCl%C3%BCm", YouTube.getSearchQHFactory().fromQuery("Gülüm", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=%3Fj%24%29H%C2%A7B", YouTube.getSearchQHFactory().fromQuery("?j$)H§B", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +30,9 @@ public class YoutubeSearchQHTest {
 | 
			
		|||
                .fromQuery("", asList(new String[]{VIDEOS}), "").getContentFilters().get(0));
 | 
			
		||||
        assertEquals(CHANNELS, YouTube.getSearchQHFactory()
 | 
			
		||||
                .fromQuery("asdf", asList(new String[]{CHANNELS}), "").getContentFilters().get(0));
 | 
			
		||||
 | 
			
		||||
        assertEquals(MUSIC_SONGS, YouTube.getSearchQHFactory()
 | 
			
		||||
                .fromQuery("asdf", asList(new String[]{MUSIC_SONGS}), "").getContentFilters().get(0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
| 
						 | 
				
			
			@ -36,16 +45,23 @@ public class YoutubeSearchQHTest {
 | 
			
		|||
                .fromQuery("asdf", asList(new String[]{PLAYLISTS}), "").getUrl());
 | 
			
		||||
        assertEquals("https://www.youtube.com/results?search_query=asdf", YouTube.getSearchQHFactory()
 | 
			
		||||
                .fromQuery("asdf", asList(new String[]{"fjiijie"}), "").getUrl());
 | 
			
		||||
 | 
			
		||||
        assertEquals("https://music.youtube.com/search?q=asdf", YouTube.getSearchQHFactory()
 | 
			
		||||
                .fromQuery("asdf", asList(new String[]{MUSIC_SONGS}), "").getUrl());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetAvailableContentFilter() {
 | 
			
		||||
        final String[] contentFilter = YouTube.getSearchQHFactory().getAvailableContentFilter();
 | 
			
		||||
        assertEquals(4, contentFilter.length);
 | 
			
		||||
        assertEquals(8, contentFilter.length);
 | 
			
		||||
        assertEquals("all", contentFilter[0]);
 | 
			
		||||
        assertEquals("videos", contentFilter[1]);
 | 
			
		||||
        assertEquals("channels", contentFilter[2]);
 | 
			
		||||
        assertEquals("playlists", contentFilter[3]);
 | 
			
		||||
        assertEquals("music_songs", contentFilter[4]);
 | 
			
		||||
        assertEquals("music_videos", contentFilter[5]);
 | 
			
		||||
        assertEquals("music_albums", contentFilter[6]);
 | 
			
		||||
        assertEquals("music_playlists", contentFilter[7]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue