Skip to content

Commit 8bab96a

Browse files
committed
[YouTube] Add a test of a channel with pronouns
This is to test subscribers count parsing in a page header when a channel has pronouns.
1 parent 53757ae commit 8bab96a

5 files changed

Lines changed: 1076 additions & 0 deletions

File tree

extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeChannelExtractorTest.java

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,4 +1026,99 @@ public void testOriginalUrl() throws Exception {
10261026
extractor.getOriginalUrl());
10271027
}
10281028
}
1029+
1030+
static class ChannelWithPronouns implements BaseChannelExtractorTest {
1031+
private static YoutubeChannelExtractor extractor;
1032+
1033+
@BeforeAll
1034+
static void setUp() throws Exception {
1035+
YoutubeTestsUtils.ensureStateless();
1036+
NewPipe.init(DownloaderFactory.getDownloader(RESOURCE_PATH + "channelWithPronouns"));
1037+
extractor = (YoutubeChannelExtractor) YouTube
1038+
.getChannelExtractor("https://www.youtube.com/@ShempOfficial");
1039+
extractor.fetchPage();
1040+
}
1041+
1042+
@Override
1043+
@Test
1044+
public void testServiceId() {
1045+
assertEquals(YouTube.getServiceId(), extractor.getServiceId());
1046+
}
1047+
1048+
@Override
1049+
@Test
1050+
public void testName() throws Exception {
1051+
assertEquals("Shemp", extractor.getName());
1052+
}
1053+
1054+
@Override
1055+
@Test
1056+
public void testId() throws Exception {
1057+
assertEquals("UCEAXWzgcuF6XEiJcszhikQA", extractor.getId());
1058+
}
1059+
1060+
@Override
1061+
@Test
1062+
public void testUrl() throws ParsingException {
1063+
assertEquals("https://www.youtube.com/channel/UCEAXWzgcuF6XEiJcszhikQA", extractor.getUrl());
1064+
}
1065+
1066+
@Override
1067+
@Test
1068+
public void testOriginalUrl() throws ParsingException {
1069+
assertEquals("https://www.youtube.com/@ShempOfficial", extractor.getOriginalUrl());
1070+
}
1071+
1072+
@Override
1073+
@Test
1074+
public void testDescription() throws Exception {
1075+
assertContains("HEY! HEY YOU! YEAH YOU!", extractor.getDescription());
1076+
}
1077+
1078+
@Override
1079+
@Test
1080+
public void testAvatars() throws Exception {
1081+
YoutubeTestsUtils.testImages(extractor.getAvatars());
1082+
}
1083+
1084+
@Override
1085+
@Test
1086+
public void testBanners() throws Exception {
1087+
YoutubeTestsUtils.testImages(extractor.getBanners());
1088+
}
1089+
1090+
@Override
1091+
@Test
1092+
public void testFeedUrl() throws Exception {
1093+
assertEquals("https://www.youtube.com/feeds/videos.xml?channel_id=UCEAXWzgcuF6XEiJcszhikQA", extractor.getFeedUrl());
1094+
}
1095+
1096+
@Override
1097+
@Test
1098+
public void testSubscriberCount() throws Exception {
1099+
ExtractorAsserts.assertGreaterOrEqual(7_000, extractor.getSubscriberCount());
1100+
}
1101+
1102+
@Override
1103+
@Test
1104+
public void testVerified() throws Exception {
1105+
assertFalse(extractor.isVerified());
1106+
}
1107+
1108+
@Override
1109+
@Test
1110+
public void testTabs() throws Exception {
1111+
assertTabsContain(extractor.getTabs(),
1112+
ChannelTabs.VIDEOS, ChannelTabs.LIVESTREAMS, ChannelTabs.PLAYLISTS);
1113+
assertTrue(extractor.getTabs().stream()
1114+
.filter(it -> ChannelTabs.VIDEOS.equals(it.getContentFilters().get(0)))
1115+
.allMatch(ReadyChannelTabListLinkHandler.class::isInstance));
1116+
}
1117+
1118+
@Override
1119+
@Test
1120+
public void testTags() throws Exception {
1121+
assertTrue(extractor.getTags().contains("shemp"));
1122+
}
1123+
}
10291124
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
{
2+
"request": {
3+
"httpMethod": "GET",
4+
"url": "https://www.youtube.com/sw.js",
5+
"headers": {
6+
"Referer": [
7+
"https://www.youtube.com"
8+
],
9+
"Origin": [
10+
"https://www.youtube.com"
11+
],
12+
"Accept-Language": [
13+
"en-GB, en;q\u003d0.9"
14+
]
15+
},
16+
"localization": {
17+
"languageCode": "en",
18+
"countryCode": "GB"
19+
}
20+
},
21+
"response": {
22+
"responseCode": 200,
23+
"responseMessage": "",
24+
"responseHeaders": {
25+
"access-control-allow-credentials": [
26+
"true"
27+
],
28+
"access-control-allow-origin": [
29+
"https://www.youtube.com"
30+
],
31+
"alt-svc": [
32+
"h3\u003d\":443\"; ma\u003d2592000,h3-29\u003d\":443\"; ma\u003d2592000"
33+
],
34+
"cache-control": [
35+
"private, max-age\u003d0"
36+
],
37+
"content-security-policy": [
38+
"require-trusted-types-for \u0027script\u0027"
39+
],
40+
"content-type": [
41+
"text/javascript; charset\u003dutf-8"
42+
],
43+
"cross-origin-opener-policy": [
44+
"same-origin; report-to\u003d\"youtube_main\""
45+
],
46+
"date": [
47+
"Mon, 07 Jul 2025 16:58:02 GMT"
48+
],
49+
"document-policy": [
50+
"include-js-call-stacks-in-crash-reports"
51+
],
52+
"expires": [
53+
"Mon, 07 Jul 2025 16:58:02 GMT"
54+
],
55+
"origin-trial": [
56+
"AmhMBR6zCLzDDxpW+HfpP67BqwIknWnyMOXOQGfzYswFmJe+fgaI6XZgAzcxOrzNtP7hEDsOo1jdjFnVr2IdxQ4AAAB4eyJvcmlnaW4iOiJodHRwczovL3lvdXR1YmUuY29tOjQ0MyIsImZlYXR1cmUiOiJXZWJWaWV3WFJlcXVlc3RlZFdpdGhEZXByZWNhdGlvbiIsImV4cGlyeSI6MTc1ODA2NzE5OSwiaXNTdWJkb21haW4iOnRydWV9"
57+
],
58+
"p3p": [
59+
"CP\u003d\"This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl\u003den-GB for more info.\""
60+
],
61+
"permissions-policy": [
62+
"ch-ua-arch\u003d*, ch-ua-bitness\u003d*, ch-ua-full-version\u003d*, ch-ua-full-version-list\u003d*, ch-ua-model\u003d*, ch-ua-wow64\u003d*, ch-ua-form-factors\u003d*, ch-ua-platform\u003d*, ch-ua-platform-version\u003d*"
63+
],
64+
"report-to": [
65+
"{\"group\":\"youtube_main\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/youtube_main\"}]}"
66+
],
67+
"reporting-endpoints": [
68+
"default\u003d\"/web-reports?context\u003deJwNzltIk3EcxvH-PhT2vnPv-_sbVCqxTMrMydRmZWqhtQ5YGRSIh7aczsypuba1zO66ESQK6aBZEYRKkR0ES9S6KAhKCTwQmCYoIYJ5uMjyUPa7-Nx9eXiUltWDplKR6i4T9pUyEXW4XLy4WinytnnEwS8XRa3NK-abvOJZp1c09PjEsUGfmDL5RW6kX9wd9IuH3_zCPRoQS-MB8UDPDnKFZQcFmCMiO6gzR4HLpeBXvYK5YQWBGQW5O1T0H1UxdVxFaZ6K9mYVna9U1A2pGJlQ4cs1YNZhgNVnQMW8AZNZIeiuD0FffwhiTxmRUmtES4cRWR-NuMmKl42Y_mtEUqqG1kMa_EUaTBUaVL-GhhoN8Xc0jNdrCH6kYf0nDTVjGrqjdAyk6wh26FAYruiw3tLRd0_HyR4dr1ljr477P3QM_9axd1FHfijBF0Po2klwWAlJyYSqVMK1fYS5DELjacKInRDtJFhchMxiwssSgvM8obqaO9ZVS0i_TpipI6TdJigNhOEmwvdmwrsnhNCnhPBWQlsb4UQ7t28IK28J6mfC416CHCBETBKmpwiYJ4z9IRgWCUYm2Tq2gYWxTczEothWFsNimYUlsCS2m6WwNJbODjAbO7fEf5d54x_hxioJRUhMBEkY10q4N0rMhkl0hEsEmyRsmyW-sv1REt3REgvbJayJEvXs5x6Jf8kSW1IkKtMk8jMkmlmVTWKIjbLYIxK7MiVy2BlWwAqZi7mZh_lZFZOG4IaF5-_X6LNjEx9EpPlyhc_rKyiKu1RUYHZ5Ksq95qLyQrPTU-ItcZ512xMsCVZLUqIlLt5iv2D5D2YQ1as\""
69+
],
70+
"server": [
71+
"ESF"
72+
],
73+
"set-cookie": [
74+
"YSC\u003dFqJ3vRvm-Gk; Domain\u003d.youtube.com; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone",
75+
"VISITOR_INFO1_LIVE\u003d; Domain\u003d.youtube.com; Expires\u003dTue, 11-Oct-2022 16:58:02 GMT; Path\u003d/; Secure; HttpOnly; SameSite\u003dnone"
76+
],
77+
"strict-transport-security": [
78+
"max-age\u003d31536000"
79+
],
80+
"x-content-type-options": [
81+
"nosniff"
82+
],
83+
"x-frame-options": [
84+
"SAMEORIGIN"
85+
],
86+
"x-xss-protection": [
87+
"0"
88+
]
89+
},
90+
"responseBody": "\n self.addEventListener(\u0027install\u0027, event \u003d\u003e {\n event.waitUntil(self.skipWaiting());\n });\n self.addEventListener(\u0027activate\u0027, event \u003d\u003e {\n event.waitUntil(\n self.clients.claim().then(() \u003d\u003e self.registration.unregister()));\n });\n ",
91+
"latestUrl": "https://www.youtube.com/sw.js"
92+
}
93+
}

extractor/src/test/resources/org/schabi/newpipe/extractor/services/youtube/extractor/channel/channelWithPronouns/generated_mock_1.json

Lines changed: 89 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)