2017-08-05 16:15:36 +02:00
|
|
|
package org.schabi.newpipe.extractor.services.youtube;
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
import org.junit.jupiter.api.BeforeAll;
|
|
|
|
import org.junit.jupiter.api.Test;
|
2021-01-17 18:54:27 +01:00
|
|
|
import org.schabi.newpipe.downloader.DownloaderFactory;
|
2020-12-15 15:09:49 +01:00
|
|
|
import org.schabi.newpipe.downloader.DownloaderTestImpl;
|
2021-12-27 21:08:08 +01:00
|
|
|
import org.schabi.newpipe.extractor.ExtractorAsserts;
|
2017-08-05 10:03:56 +02:00
|
|
|
import org.schabi.newpipe.extractor.NewPipe;
|
2017-08-11 03:23:09 +02:00
|
|
|
import org.schabi.newpipe.extractor.channel.ChannelExtractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
import org.schabi.newpipe.extractor.channel.ChannelTabExtractor;
|
2021-03-22 10:35:05 +01:00
|
|
|
import org.schabi.newpipe.extractor.exceptions.AccountTerminatedException;
|
2020-03-01 01:52:25 +01:00
|
|
|
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
2018-05-06 14:08:50 +02:00
|
|
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
2022-11-04 23:47:44 +01:00
|
|
|
import org.schabi.newpipe.extractor.linkhandler.ChannelTabs;
|
2018-03-04 21:26:13 +01:00
|
|
|
import org.schabi.newpipe.extractor.services.BaseChannelExtractorTest;
|
2018-05-08 21:19:03 +02:00
|
|
|
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeChannelExtractor;
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2021-01-17 18:54:27 +01:00
|
|
|
import java.io.IOException;
|
2022-10-22 15:28:48 +02:00
|
|
|
import java.util.Set;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertContains;
|
|
|
|
import static org.schabi.newpipe.extractor.ExtractorAsserts.assertIsSecureUrl;
|
|
|
|
import static org.schabi.newpipe.extractor.ServiceList.YouTube;
|
|
|
|
import static org.schabi.newpipe.extractor.services.DefaultTests.*;
|
2020-02-08 23:58:46 +01:00
|
|
|
|
2017-08-05 10:03:56 +02:00
|
|
|
/**
|
2017-08-11 03:23:09 +02:00
|
|
|
* Test for {@link ChannelExtractor}
|
2017-08-05 10:03:56 +02:00
|
|
|
*/
|
2017-08-11 03:23:09 +02:00
|
|
|
public class YoutubeChannelExtractorTest {
|
2020-03-01 01:52:25 +01:00
|
|
|
|
2021-01-17 18:54:27 +01:00
|
|
|
private static final String RESOURCE_PATH = DownloaderFactory.RESOURCE_PATH + "services/youtube/extractor/channel/";
|
|
|
|
|
2020-03-01 01:52:25 +01:00
|
|
|
public static class NotAvailable {
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2021-01-17 18:54:27 +01:00
|
|
|
public static void setUp() throws IOException {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "notAvailable"));
|
2020-03-01 01:52:25 +01:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2020-03-01 01:52:25 +01:00
|
|
|
public void deletedFetch() throws Exception {
|
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCAUc4iz6edWerIjlnL8OSSw");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
assertThrows(ContentNotAvailableException.class, extractor::fetchPage);
|
2020-03-01 01:52:25 +01:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2020-03-01 01:52:25 +01:00
|
|
|
public void nonExistentFetch() throws Exception {
|
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/DOESNT-EXIST");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
assertThrows(ContentNotAvailableException.class, extractor::fetchPage);
|
2020-03-01 01:52:25 +01:00
|
|
|
}
|
2021-03-22 10:35:05 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-23 00:15:21 +01:00
|
|
|
public void accountTerminatedTOSFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated for a violation of YouTube's Terms of Service."
|
2021-03-23 00:15:21 +01:00
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCTGjY2I-ZUGnwVoWAGRd7XQ");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-23 00:15:21 +01:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-23 00:15:21 +01:00
|
|
|
public void accountTerminatedCommunityFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated for violating YouTube's Community Guidelines."
|
2021-03-22 10:35:05 +01:00
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UC0AuOxCr9TZ0TtEgL1zpIgA");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-22 10:35:05 +01:00
|
|
|
}
|
2021-03-23 00:15:21 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-30 10:14:33 +02:00
|
|
|
public void accountTerminatedHateFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated due to multiple or severe violations
|
|
|
|
// of YouTube's policy prohibiting hate speech."
|
2021-03-30 10:14:33 +02:00
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCPWXIOPK-9myzek6jHR5yrg");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-30 10:14:33 +02:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-30 10:14:33 +02:00
|
|
|
public void accountTerminatedBullyFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated due to multiple or severe violations
|
|
|
|
// of YouTube's policy prohibiting content designed to harass, bully or threaten."
|
2021-03-30 10:14:33 +02:00
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://youtube.com/channel/UCB1o7_gbFp2PLsamWxFenBg");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-30 10:14:33 +02:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-30 10:14:33 +02:00
|
|
|
public void accountTerminatedSpamFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated due to multiple or severe violations
|
|
|
|
// of YouTube's policy against spam, deceptive practices and misleading content
|
|
|
|
// or other Terms of Service violations."
|
2021-03-30 10:14:33 +02:00
|
|
|
final ChannelExtractor extractor =
|
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCoaO4U_p7G7AwalqSbGCZOA");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-30 10:14:33 +02:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2021-03-23 00:15:21 +01:00
|
|
|
public void accountTerminatedCopyrightFetch() throws Exception {
|
2021-06-06 11:38:10 +02:00
|
|
|
// "This account has been terminated because we received multiple third-party claims
|
|
|
|
// of copyright infringement regarding material that the user posted."
|
2021-03-23 00:15:21 +01:00
|
|
|
final ChannelExtractor extractor =
|
2021-12-08 21:51:15 +01:00
|
|
|
YouTube.getChannelExtractor("https://www.youtube.com/channel/UCI4i4RgFT5ilfMpna4Z_Y8w");
|
2021-12-27 21:08:08 +01:00
|
|
|
|
|
|
|
AccountTerminatedException ex =
|
|
|
|
assertThrows(AccountTerminatedException.class, extractor::fetchPage);
|
|
|
|
assertEquals(AccountTerminatedException.Reason.VIOLATION, ex.getReason());
|
2021-03-23 00:15:21 +01:00
|
|
|
}
|
|
|
|
|
2020-03-01 01:52:25 +01:00
|
|
|
}
|
|
|
|
|
2020-04-01 22:31:53 +02:00
|
|
|
public static class NotSupported {
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2021-01-17 18:54:27 +01:00
|
|
|
public static void setUp() throws IOException {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "notSupported"));
|
2020-04-01 22:31:53 +02:00
|
|
|
}
|
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@Test
|
2022-01-04 17:28:31 +01:00
|
|
|
void noVideoTab() throws Exception {
|
2020-04-01 22:31:53 +02:00
|
|
|
final ChannelExtractor extractor = YouTube.getChannelExtractor("https://invidio.us/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ");
|
2022-01-04 17:28:31 +01:00
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(extractor.getTabs().isEmpty());
|
2020-04-01 22:31:53 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
public static class Gronkh implements BaseChannelExtractorTest {
|
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2018-03-04 21:26:13 +01:00
|
|
|
public static void setUp() throws Exception {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "gronkh"));
|
2018-03-04 21:26:13 +01:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
2022-11-02 18:31:15 +01:00
|
|
|
.getChannelExtractor("http://www.youtube.com/@Gronkh");
|
2018-03-04 21:26:13 +01:00
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testName() throws Exception {
|
|
|
|
assertEquals("Gronkh", extractor.getName());
|
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UCYJ61XIK64sp6ZFFS8sctxw", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UCYJ61XIK64sp6ZFFS8sctxw", tabExtractor.getId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-16 04:56:10 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCYJ61XIK64sp6ZFFS8sctxw", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCYJ61XIK64sp6ZFFS8sctxw", tabExtractor.getUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-16 04:56:10 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
2022-11-02 18:31:15 +01:00
|
|
|
assertEquals("http://www.youtube.com/@Gronkh", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/c/gronkh/videos", tabExtractor.getOriginalUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-07 19:00:36 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testDescription() throws Exception {
|
2021-12-27 21:08:08 +01:00
|
|
|
assertContains("Ungebremster Spieltrieb seit 1896.", extractor.getDescription());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
String bannerUrl = extractor.getBannerUrl();
|
|
|
|
assertIsSecureUrl(bannerUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", bannerUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCYJ61XIK64sp6ZFFS8sctxw", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testSubscriberCount() throws Exception {
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertGreaterOrEqual(4_900_000, extractor.getSubscriberCount());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2021-01-22 01:44:58 +01:00
|
|
|
|
2022-10-22 15:28:48 +02:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2021-01-22 01:44:58 +01:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertTrue(extractor.isVerified());
|
|
|
|
}
|
|
|
|
|
2022-10-22 15:28:48 +02:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2022-10-22 15:28:48 +02:00
|
|
|
public void testTabs() throws Exception {
|
2022-11-04 23:47:44 +01:00
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
2023-03-21 01:00:35 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.LIVESTREAMS));
|
2022-11-04 23:47:44 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
2022-10-22 15:28:48 +02:00
|
|
|
}
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Youtube RED/Premium ad blocking test
|
|
|
|
public static class VSauce implements BaseChannelExtractorTest {
|
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2018-08-04 14:20:27 +02:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2018-08-04 14:20:27 +02:00
|
|
|
public static void setUp() throws Exception {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "VSauce"));
|
2018-08-04 14:20:27 +02:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/user/Vsauce");
|
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testName() throws Exception {
|
|
|
|
assertEquals("Vsauce", extractor.getName());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UC6nSFpj9HTCZ5t-N3Rm3-HA", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UC6nSFpj9HTCZ5t-N3Rm3-HA", tabExtractor.getId());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HA", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HA", tabExtractor.getUrl());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/user/Vsauce", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/@Vsauce/videos", tabExtractor.getOriginalUrl());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testDescription() throws Exception {
|
2021-12-27 21:08:08 +01:00
|
|
|
assertContains("Our World is Amazing. \n\nQuestions? Ideas? Tweet me:", extractor.getDescription());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
String bannerUrl = extractor.getBannerUrl();
|
|
|
|
assertIsSecureUrl(bannerUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", bannerUrl);
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UC6nSFpj9HTCZ5t-N3Rm3-HA", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-08-04 14:20:27 +02:00
|
|
|
public void testSubscriberCount() throws Exception {
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertGreaterOrEqual(17_000_000, extractor.getSubscriberCount());
|
2018-08-04 14:20:27 +02:00
|
|
|
}
|
|
|
|
|
2022-01-04 17:28:31 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2021-01-22 01:44:58 +01:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertTrue(extractor.isVerified());
|
|
|
|
}
|
|
|
|
|
2022-10-22 15:28:48 +02:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2022-10-22 15:28:48 +02:00
|
|
|
public void testTabs() throws Exception {
|
2022-11-04 23:47:44 +01:00
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
2023-03-21 01:00:35 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.SHORTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.LIVESTREAMS));
|
2022-11-04 23:47:44 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
2022-10-22 15:28:48 +02:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
}
|
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
public static class Kurzgesagt implements BaseChannelExtractorTest {
|
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2018-03-04 21:26:13 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2018-03-04 21:26:13 +01:00
|
|
|
public static void setUp() throws Exception {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "kurzgesagt"));
|
2018-03-04 21:26:13 +01:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q");
|
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testName() throws Exception {
|
2021-12-27 21:08:08 +01:00
|
|
|
assertTrue(extractor.getName().startsWith("Kurzgesagt"));
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UCsXVk37bltHxD1rDPwtNM8Q", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UCsXVk37bltHxD1rDPwtNM8Q", tabExtractor.getId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q", tabExtractor.getUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
2018-03-04 21:26:13 +01:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/@kurzgesagt/videos", tabExtractor.getOriginalUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testDescription() throws Exception {
|
2022-03-19 17:02:26 +01:00
|
|
|
ExtractorAsserts.assertContains("science", extractor.getDescription());
|
|
|
|
ExtractorAsserts.assertContains("animators", extractor.getDescription());
|
2018-03-04 21:26:13 +01:00
|
|
|
//TODO: Description get cuts out, because the og:description is optimized and don't have all the content
|
|
|
|
//assertTrue(description, description.contains("Currently we make one animation video per month"));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
String bannerUrl = extractor.getBannerUrl();
|
|
|
|
assertIsSecureUrl(bannerUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", bannerUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCsXVk37bltHxD1rDPwtNM8Q", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testSubscriberCount() throws Exception {
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertGreaterOrEqual(17_000_000, extractor.getSubscriberCount());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2021-01-22 01:44:58 +01:00
|
|
|
|
2022-01-04 17:28:31 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2021-01-22 01:44:58 +01:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertTrue(extractor.isVerified());
|
|
|
|
}
|
2022-10-22 15:28:48 +02:00
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2022-10-22 15:28:48 +02:00
|
|
|
public void testTabs() throws Exception {
|
2022-11-04 23:47:44 +01:00
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
2022-11-04 23:47:44 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
2022-10-22 15:28:48 +02:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
}
|
|
|
|
|
2021-01-17 18:54:27 +01:00
|
|
|
public static class KurzgesagtAdditional {
|
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2018-03-04 21:26:13 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2018-03-04 21:26:13 +01:00
|
|
|
public static void setUp() throws Exception {
|
2021-01-17 18:54:27 +01:00
|
|
|
// Test is not deterministic, mocks can't be used
|
2019-04-28 22:03:16 +02:00
|
|
|
NewPipe.init(DownloaderTestImpl.getInstance());
|
2021-01-17 18:54:27 +01:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q");
|
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2021-01-17 18:54:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testGetPageInNewExtractor() throws Exception {
|
|
|
|
final ChannelExtractor newExtractor = YouTube.getChannelExtractor(extractor.getUrl());
|
2023-04-14 14:10:26 +02:00
|
|
|
newExtractor.fetchPage();
|
|
|
|
final ChannelTabExtractor newTabExtractor = YouTube.getChannelTabExtractor(newExtractor.getTabs().get(0));
|
|
|
|
defaultTestGetPageInNewExtractor(tabExtractor, newTabExtractor);
|
2021-01-17 18:54:27 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class CaptainDisillusion implements BaseChannelExtractorTest {
|
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2021-01-17 18:54:27 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2021-01-17 18:54:27 +01:00
|
|
|
public static void setUp() throws Exception {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "captainDisillusion"));
|
2018-03-04 21:26:13 +01:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/user/CaptainDisillusion/videos");
|
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testName() throws Exception {
|
2019-03-23 14:40:34 +01:00
|
|
|
assertEquals("Captain Disillusion", extractor.getName());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UCEOXxzW2vU0P-0THehuIIeg", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UCEOXxzW2vU0P-0THehuIIeg", tabExtractor.getId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCEOXxzW2vU0P-0THehuIIeg", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCEOXxzW2vU0P-0THehuIIeg", tabExtractor.getUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
2018-03-04 21:26:13 +01:00
|
|
|
assertEquals("https://www.youtube.com/user/CaptainDisillusion/videos", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/@CaptainDisillusion/videos", tabExtractor.getOriginalUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testDescription() throws Exception {
|
2021-12-27 21:08:08 +01:00
|
|
|
ExtractorAsserts.assertContains("In a world where", extractor.getDescription());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
String bannerUrl = extractor.getBannerUrl();
|
|
|
|
assertIsSecureUrl(bannerUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", bannerUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCEOXxzW2vU0P-0THehuIIeg", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testSubscriberCount() throws Exception {
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertGreaterOrEqual(2_000_000, extractor.getSubscriberCount());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2021-01-22 01:44:58 +01:00
|
|
|
|
2022-01-04 17:28:31 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2021-01-22 01:44:58 +01:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertTrue(extractor.isVerified());
|
|
|
|
}
|
2022-10-22 15:28:48 +02:00
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2022-10-22 15:28:48 +02:00
|
|
|
public void testTabs() throws Exception {
|
2022-11-04 23:47:44 +01:00
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
2022-11-04 23:47:44 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
2022-10-22 15:28:48 +02:00
|
|
|
}
|
2018-02-26 16:49:15 +01:00
|
|
|
}
|
|
|
|
|
2018-03-04 21:26:13 +01:00
|
|
|
public static class RandomChannel implements BaseChannelExtractorTest {
|
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-14 14:10:26 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2018-03-04 21:26:13 +01:00
|
|
|
|
2021-12-27 21:08:08 +01:00
|
|
|
@BeforeAll
|
2018-03-04 21:26:13 +01:00
|
|
|
public static void setUp() throws Exception {
|
2022-02-07 21:23:38 +01:00
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2022-03-16 17:22:42 +01:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "random"));
|
2018-03-04 21:26:13 +01:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/channel/UCUaQMQS9lY5lit3vurpXQ6w");
|
|
|
|
extractor.fetchPage();
|
2023-04-14 14:10:26 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testName() throws Exception {
|
|
|
|
assertEquals("random channel", extractor.getName());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UCUaQMQS9lY5lit3vurpXQ6w", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UCUaQMQS9lY5lit3vurpXQ6w", tabExtractor.getId());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCUaQMQS9lY5lit3vurpXQ6w", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCUaQMQS9lY5lit3vurpXQ6w", tabExtractor.getUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-05-06 14:08:50 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
2018-03-04 21:26:13 +01:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCUaQMQS9lY5lit3vurpXQ6w", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/channel/UCUaQMQS9lY5lit3vurpXQ6w/videos", tabExtractor.getOriginalUrl());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() {
|
|
|
|
try {
|
2023-04-14 14:10:26 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2021-04-08 17:23:31 +02:00
|
|
|
} catch (final Throwable ignored) {
|
2018-03-04 21:26:13 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
fail("This channel doesn't have more items, it should throw an error");
|
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testDescription() throws Exception {
|
2021-12-27 21:08:08 +01:00
|
|
|
ExtractorAsserts.assertContains("Hey there iu will upoload a load of pranks onto this channel", extractor.getDescription());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
String bannerUrl = extractor.getBannerUrl();
|
|
|
|
assertIsSecureUrl(bannerUrl);
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertContains("yt3", bannerUrl);
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCUaQMQS9lY5lit3vurpXQ6w", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2018-03-04 21:26:13 +01:00
|
|
|
public void testSubscriberCount() throws Exception {
|
2022-01-04 17:28:31 +01:00
|
|
|
ExtractorAsserts.assertGreaterOrEqual(50, extractor.getSubscriberCount());
|
2018-03-04 21:26:13 +01:00
|
|
|
}
|
2021-01-22 01:44:58 +01:00
|
|
|
|
2022-01-04 17:28:31 +01:00
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2021-01-22 01:44:58 +01:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertFalse(extractor.isVerified());
|
|
|
|
}
|
2022-10-22 15:28:48 +02:00
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2022-10-22 15:28:48 +02:00
|
|
|
public void testTabs() throws Exception {
|
2022-11-04 23:47:44 +01:00
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
2023-04-14 14:10:26 +02:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
2022-11-04 23:47:44 +01:00
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
2022-10-22 15:28:48 +02:00
|
|
|
}
|
2017-08-05 10:03:56 +02:00
|
|
|
}
|
2023-04-16 17:35:02 +02:00
|
|
|
|
2023-04-21 22:48:37 +02:00
|
|
|
public static class CarouselHeader implements BaseChannelExtractorTest {
|
2023-04-16 17:35:02 +02:00
|
|
|
private static YoutubeChannelExtractor extractor;
|
2023-04-27 12:31:39 +02:00
|
|
|
private static ChannelTabExtractor tabExtractor;
|
2023-04-16 17:35:02 +02:00
|
|
|
|
|
|
|
@BeforeAll
|
|
|
|
public static void setUp() throws Exception {
|
|
|
|
YoutubeTestsUtils.ensureStateless();
|
2023-04-21 22:48:37 +02:00
|
|
|
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "carouselHeader"));
|
2023-04-16 17:35:02 +02:00
|
|
|
extractor = (YoutubeChannelExtractor) YouTube
|
|
|
|
.getChannelExtractor("https://www.youtube.com/channel/UCHF66aWLOxBW4l6VkSrS3cQ");
|
|
|
|
extractor.fetchPage();
|
2023-04-27 12:31:39 +02:00
|
|
|
|
|
|
|
tabExtractor = YouTube.getChannelTabExtractor(extractor.getTabs().get(0));
|
|
|
|
tabExtractor.fetchPage();
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Extractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testServiceId() {
|
|
|
|
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals(YouTube.getServiceId(), tabExtractor.getServiceId());
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testName() throws Exception {
|
|
|
|
assertEquals(extractor.getName(), "Coachella");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testId() throws Exception {
|
|
|
|
assertEquals("UCHF66aWLOxBW4l6VkSrS3cQ", extractor.getId());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("UCHF66aWLOxBW4l6VkSrS3cQ", tabExtractor.getId());
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCHF66aWLOxBW4l6VkSrS3cQ", extractor.getUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("https://www.youtube.com/channel/UCHF66aWLOxBW4l6VkSrS3cQ", tabExtractor.getUrl());
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testOriginalUrl() throws ParsingException {
|
|
|
|
assertEquals("https://www.youtube.com/channel/UCHF66aWLOxBW4l6VkSrS3cQ", extractor.getOriginalUrl());
|
2023-04-27 12:31:39 +02:00
|
|
|
assertEquals("/@Coachella/videos", tabExtractor.getOriginalUrl());
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ListExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testRelatedItems() throws Exception {
|
2023-04-27 12:31:39 +02:00
|
|
|
defaultTestRelatedItems(tabExtractor);
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testMoreRelatedItems() throws Exception {
|
2023-04-27 12:31:39 +02:00
|
|
|
defaultTestMoreItems(tabExtractor);
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
|
|
|
|
2023-05-01 17:43:59 +02:00
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// ChannelExtractor
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
@Override
|
|
|
|
public void testDescription() {
|
|
|
|
}
|
2023-04-16 17:35:02 +02:00
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testAvatarUrl() throws Exception {
|
|
|
|
String avatarUrl = extractor.getAvatarUrl();
|
|
|
|
assertIsSecureUrl(avatarUrl);
|
|
|
|
ExtractorAsserts.assertContains("yt3", avatarUrl);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testBannerUrl() throws Exception {
|
|
|
|
// CarouselHeaderRender does not contain a banner
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testFeedUrl() throws Exception {
|
|
|
|
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCHF66aWLOxBW4l6VkSrS3cQ", extractor.getFeedUrl());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testSubscriberCount() throws Exception {
|
|
|
|
ExtractorAsserts.assertGreaterOrEqual(2_900_000, extractor.getSubscriberCount());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-16 17:35:02 +02:00
|
|
|
public void testVerified() throws Exception {
|
|
|
|
assertTrue(extractor.isVerified());
|
|
|
|
}
|
2023-04-27 12:31:39 +02:00
|
|
|
|
|
|
|
@Test
|
2023-05-01 17:43:59 +02:00
|
|
|
@Override
|
2023-04-27 12:31:39 +02:00
|
|
|
public void testTabs() throws Exception {
|
|
|
|
Set<String> tabs = extractor.getTabs().stream()
|
|
|
|
.map(linkHandler -> linkHandler.getContentFilters().get(0)).collect(Collectors.toSet());
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.VIDEOS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.SHORTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.LIVESTREAMS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.PLAYLISTS));
|
|
|
|
assertTrue(tabs.contains(ChannelTabs.CHANNELS));
|
|
|
|
}
|
2023-04-16 17:35:02 +02:00
|
|
|
}
|
2019-08-27 13:27:11 +02:00
|
|
|
}
|