test: add integration tests for YTM albums/search

This commit is contained in:
ThetaDev 2022-11-01 15:37:06 +01:00
parent c7ae2f8531
commit b38bc711c7
16 changed files with 3743 additions and 286 deletions

View file

@ -128,7 +128,7 @@ impl MapResponse<Paginator<MusicItem>> for response::MusicContinuation {
_deobf: Option<&crate::deobfuscate::Deobfuscator>,
) -> Result<MapResult<Paginator<MusicItem>>, ExtractionError> {
let mut mapper = MusicListMapper::new(lang);
let mut shelf = self.continuation_contents.music_playlist_shelf_continuation;
let mut shelf = self.continuation_contents.music_shelf_continuation;
mapper.map_response(shelf.contents);
let map_res = mapper.items();

View file

@ -183,7 +183,8 @@ pub(crate) struct MusicContinuation {
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct ContinuationContents {
pub music_playlist_shelf_continuation: MusicShelf,
#[serde(alias = "musicPlaylistShelfContinuation")]
pub music_shelf_continuation: MusicShelf,
}
/*

View file

@ -36,13 +36,47 @@ pub(crate) struct WatchEndpoint {
pub start_time_seconds: u32,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
#[derive(Debug)]
pub(crate) struct BrowseEndpoint {
pub browse_id: String,
pub browse_endpoint_context_supported_configs: Option<BrowseEndpointConfig>,
}
impl<'de> Deserialize<'de> for BrowseEndpoint {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
struct BEp {
pub browse_id: String,
pub browse_endpoint_context_supported_configs: Option<BrowseEndpointConfig>,
}
let bep = BEp::deserialize(deserializer)?;
// Remove the VL prefix from the playlist id
let browse_id = bep
.browse_endpoint_context_supported_configs
.as_ref()
.and_then(
|cfg| match cfg.browse_endpoint_context_music_config.page_type {
PageType::Playlist => bep.browse_id.strip_prefix("VL"),
_ => None,
},
)
.map(str::to_owned)
.unwrap_or(bep.browse_id);
Ok(Self {
browse_id,
browse_endpoint_context_supported_configs: bep
.browse_endpoint_context_supported_configs,
})
}
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct UrlEndpoint {
@ -75,9 +109,12 @@ pub(crate) struct WebCommandMetadata {
#[derive(Debug, Clone, Copy, Deserialize, PartialEq, Eq)]
pub(crate) enum PageType {
#[serde(rename = "MUSIC_PAGE_TYPE_ARTIST")]
#[serde(
rename = "MUSIC_PAGE_TYPE_ARTIST",
alias = "MUSIC_PAGE_TYPE_AUDIOBOOK_ARTIST"
)]
Artist,
#[serde(rename = "MUSIC_PAGE_TYPE_ALBUM")]
#[serde(rename = "MUSIC_PAGE_TYPE_ALBUM", alias = "MUSIC_PAGE_TYPE_AUDIOBOOK")]
Album,
#[serde(
rename = "WEB_PAGE_TYPE_CHANNEL",

View file

@ -356,7 +356,7 @@ MusicSearchResult(
],
playlists: [
MusicPlaylistItem(
id: "VLPLk76iSbFqNJsu_Gozn9SkEXxQ7t-bpXid",
id: "PLk76iSbFqNJsu_Gozn9SkEXxQ7t-bpXid",
name: "IRMA MIRTILLA Black Mamba",
thumbnail: [
Thumbnail(
@ -383,7 +383,7 @@ MusicSearchResult(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLIL9Q2jz6euDEJZKHd4QaG4iic944_vKY",
id: "PLIL9Q2jz6euDEJZKHd4QaG4iic944_vKY",
name: "Black Mamba",
thumbnail: [
Thumbnail(
@ -410,7 +410,7 @@ MusicSearchResult(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLinm7-cvTdN7RqadpfNrncUGqkdyKNpn6",
id: "PLinm7-cvTdN7RqadpfNrncUGqkdyKNpn6",
name: "Black Mamba",
thumbnail: [
Thumbnail(

View file

@ -7,7 +7,7 @@ MusicSearchFiltered(
count: None,
items: [
MusicPlaylistItem(
id: "VLPLDIoUOhQQPlVr3qepMVRsDe4T8vNQsvno",
id: "PLDIoUOhQQPlVr3qepMVRsDe4T8vNQsvno",
name: "Türkçe Pop Şarkılar 2022 - Yeni Hit Şarkılar 2022",
thumbnail: [
Thumbnail(
@ -34,7 +34,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLI_7Mg2Z_-4Lf7IYeiTEOV8HBn-nMqz5N",
id: "PLI_7Mg2Z_-4Lf7IYeiTEOV8HBn-nMqz5N",
name: "Pop 2022 ♫ Mix Pop En Ingles (English Pop Songs 2022)",
thumbnail: [
Thumbnail(
@ -61,7 +61,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLTC7VQ12-9raqhLCx1S1E_ic35t94dj28",
id: "PLTC7VQ12-9raqhLCx1S1E_ic35t94dj28",
name: "Pop & Pop Rock Hits 🔥 2012 - 2022",
thumbnail: [
Thumbnail(
@ -88,7 +88,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLPssMy7y6ygl-Kzi9Mc7TVFFPWwyAXIwW",
id: "PLPssMy7y6ygl-Kzi9Mc7TVFFPWwyAXIwW",
name: "Bester deutscher Pop/Best of German Pop music",
thumbnail: [
Thumbnail(
@ -115,7 +115,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj",
id: "PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj",
name: "Pop Music Playlist - Timeless Pop Songs (Updated Weekly 2022)",
thumbnail: [
Thumbnail(
@ -142,7 +142,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLX6L4t7t6ZanfCJ1wBxRdGZ_mk9ygmKqo",
id: "PLX6L4t7t6ZanfCJ1wBxRdGZ_mk9ygmKqo",
name: "Deutsch Pop Hits NEU 2022",
thumbnail: [
Thumbnail(
@ -169,7 +169,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPL1jMjCxDqxLvomtUMbqa_4pAjMmzpfgUy",
id: "PL1jMjCxDqxLvomtUMbqa_4pAjMmzpfgUy",
name: "Top 100 Músicas Internacionais Pop 2022",
thumbnail: [
Thumbnail(
@ -196,7 +196,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLgRdph0qPLy53IhYrQLPpATDDA2TpFey5",
id: "PLgRdph0qPLy53IhYrQLPpATDDA2TpFey5",
name: "Teen-Pop 90-2000",
thumbnail: [
Thumbnail(
@ -223,7 +223,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLV9Y77TQ4I9dXpIF-r54ZTLM5T7C4k5jf",
id: "PLV9Y77TQ4I9dXpIF-r54ZTLM5T7C4k5jf",
name: "Most Popular Soft Pop Songs of 2022 Playlist - Best Soft Pop Music Hits of the Year 2022",
thumbnail: [
Thumbnail(
@ -250,7 +250,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLlYKDqBVDxX2TXAf8ruuF3FVZgzF3wCTx",
id: "PLlYKDqBVDxX2TXAf8ruuF3FVZgzF3wCTx",
name: "Pop 2022 ♫ Best Pop Songs Playlist 2022",
thumbnail: [
Thumbnail(
@ -277,7 +277,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLMC9KNkIncKvYin_USF1qoJQnIyMAfRxl",
id: "PLMC9KNkIncKvYin_USF1qoJQnIyMAfRxl",
name: "Best Pop Songs of All Time: Playlist of Good Songs (Throwback Hits & Pop Music 2022)",
thumbnail: [
Thumbnail(
@ -304,7 +304,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLKUA473MWUv2jmkqIxzQR3YL4kuPArj4G",
id: "PLKUA473MWUv2jmkqIxzQR3YL4kuPArj4G",
name: "Best Pop Music for Office Good Songs for Work: Pop Hits Collection (Playlist Updated in 2022)",
thumbnail: [
Thumbnail(
@ -331,7 +331,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLkqz3S84Tw-RfPS9HHi3MRmrinOBKxIr8",
id: "PLkqz3S84Tw-RfPS9HHi3MRmrinOBKxIr8",
name: "Top POP Hits 2022 Biggest Pop Music Videos - Vevo",
thumbnail: [
Thumbnail(
@ -358,7 +358,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLEBX04z4REEaHbC7ghEqFwwL4ptIw8qaZ",
id: "PLEBX04z4REEaHbC7ghEqFwwL4ptIw8qaZ",
name: "Playlist Pop Rock 2022 ♫ Musique Pop Rock 2022 Nouveauté",
thumbnail: [
Thumbnail(
@ -385,7 +385,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLMC9KNkIncKtGvr2kFRuXBVmBev6cAJ2u",
id: "PLMC9KNkIncKtGvr2kFRuXBVmBev6cAJ2u",
name: "Best Pop Music Videos - Top Pop Hits Playlist",
thumbnail: [
Thumbnail(
@ -412,7 +412,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPL9NY5axt700FjL6HlEhqlMFT1gjMGVBgy",
id: "PL9NY5axt700FjL6HlEhqlMFT1gjMGVBgy",
name: "Pop Music Songs 2022",
thumbnail: [
Thumbnail(
@ -439,7 +439,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLTariUrSxayvzHkCnEiX5-NSeFgLTqzHE",
id: "PLTariUrSxayvzHkCnEiX5-NSeFgLTqzHE",
name: "Pop Music Playlist 2022",
thumbnail: [
Thumbnail(
@ -466,7 +466,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLB8HqqmpyIBcPirb5lDm-ol01trE6dOuM",
id: "PLB8HqqmpyIBcPirb5lDm-ol01trE6dOuM",
name: "Mix Internacional 2022 ♫ As Mais Tocadas 2022 Internacionais (Playlist Musicas Pop As Melhores)",
thumbnail: [
Thumbnail(
@ -493,7 +493,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLkqz3S84Tw-Qlth8bNBpXGO7L4J1PkCW7",
id: "PLkqz3S84Tw-Qlth8bNBpXGO7L4J1PkCW7",
name: "POP INTERNATIONAL HOTLIST - Pop Hits 2022- Brandneue Pop Videos | Vevo Playlist",
thumbnail: [
Thumbnail(
@ -520,7 +520,7 @@ MusicSearchFiltered(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLkqz3S84Tw-SvUSUY5Ov8LTP3KWuWxFab",
id: "PLkqz3S84Tw-SvUSUY5Ov8LTP3KWuWxFab",
name: "Cheesy Sing-Along Pop Hits!",
thumbnail: [
Thumbnail(

View file

@ -7,7 +7,7 @@ MusicSearchFiltered(
count: None,
items: [
MusicPlaylistItem(
id: "VLRDCLAK5uy_nmS3YoxSwVVQk9lEQJ0UX4ZCjXsW_psU8",
id: "RDCLAK5uy_nmS3YoxSwVVQk9lEQJ0UX4ZCjXsW_psU8",
name: "Pop\'s Biggest Hits",
thumbnail: [
Thumbnail(
@ -36,7 +36,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nfs_t4FUu00E5ED6lveEBBX1VMYe1mFjk",
id: "RDCLAK5uy_nfs_t4FUu00E5ED6lveEBBX1VMYe1mFjk",
name: "Dance-Pop Bangers",
thumbnail: [
Thumbnail(
@ -65,7 +65,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nH_fdBVCcbNaVwi_tmZajZRq-ekddiuFY",
id: "RDCLAK5uy_nH_fdBVCcbNaVwi_tmZajZRq-ekddiuFY",
name: "Pop Meets Country",
thumbnail: [
Thumbnail(
@ -94,7 +94,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_lb6CVU6S4uVugLVNTU9WhqfaomWAgnho4",
id: "RDCLAK5uy_lb6CVU6S4uVugLVNTU9WhqfaomWAgnho4",
name: "Shout-Out Pop Hits",
thumbnail: [
Thumbnail(
@ -123,7 +123,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_mfdqvCAl8wodlx2P2_Ai2gNkiRDAufkkI",
id: "RDCLAK5uy_mfdqvCAl8wodlx2P2_Ai2gNkiRDAufkkI",
name: "Happy Pop Hits",
thumbnail: [
Thumbnail(
@ -152,7 +152,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nHSqCJjDrW9HBhCNdF6tWPdnOMngOv0wA",
id: "RDCLAK5uy_nHSqCJjDrW9HBhCNdF6tWPdnOMngOv0wA",
name: "Pop Gold",
thumbnail: [
Thumbnail(
@ -181,7 +181,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_kLB769E3eFSzgy4fbpu6-1YPLh90b0JAY",
id: "RDCLAK5uy_kLB769E3eFSzgy4fbpu6-1YPLh90b0JAY",
name: "Pop Hotlist",
thumbnail: [
Thumbnail(
@ -210,7 +210,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_m_0U5VQNyyzwwH1lRi7cPAAGXqNQnAOqY",
id: "RDCLAK5uy_m_0U5VQNyyzwwH1lRi7cPAAGXqNQnAOqY",
name: "Laid-Back Sofa Pop",
thumbnail: [
Thumbnail(
@ -239,7 +239,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_mHW5bcduhjB-PkTePAe6EoRMj1xNT8gzY",
id: "RDCLAK5uy_mHW5bcduhjB-PkTePAe6EoRMj1xNT8gzY",
name: "K-Pop Girl Crush",
thumbnail: [
Thumbnail(
@ -268,7 +268,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nWFLXjO1mIJnP4wAmxjfDS40Zmu6nF9DU",
id: "RDCLAK5uy_nWFLXjO1mIJnP4wAmxjfDS40Zmu6nF9DU",
name: "Se Habla Pop",
thumbnail: [
Thumbnail(
@ -297,7 +297,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_lHu_HYAQ0A-OfCwhuky240HOdM1UduuyA",
id: "RDCLAK5uy_lHu_HYAQ0A-OfCwhuky240HOdM1UduuyA",
name: "Presenting Pop Smoke",
thumbnail: [
Thumbnail(
@ -326,7 +326,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_lw21MuKaqFsDBIPZSbRmZcoDrHmV_c6uY",
id: "RDCLAK5uy_lw21MuKaqFsDBIPZSbRmZcoDrHmV_c6uY",
name: "Happy latin pop",
thumbnail: [
Thumbnail(
@ -355,7 +355,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_lY6JFrs7W9yIhFjUN_yxQ_ubkjcrqQaVs",
id: "RDCLAK5uy_lY6JFrs7W9yIhFjUN_yxQ_ubkjcrqQaVs",
name: "Bedroom Pop",
thumbnail: [
Thumbnail(
@ -384,7 +384,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nbK9qSkqYZvtMXH1fLCMmC1yn8HEm0W90",
id: "RDCLAK5uy_nbK9qSkqYZvtMXH1fLCMmC1yn8HEm0W90",
name: "J-Hits!",
thumbnail: [
Thumbnail(
@ -413,7 +413,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_kIcfhFcnJ9fdkKHw96Gvr6Q0_bAyWiZbM",
id: "RDCLAK5uy_kIcfhFcnJ9fdkKHw96Gvr6Q0_bAyWiZbM",
name: "Reiwa Era J-Pop",
thumbnail: [
Thumbnail(
@ -442,7 +442,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nDL8KeBrUagwyISwNmyEiSfYgz1gVCesg",
id: "RDCLAK5uy_nDL8KeBrUagwyISwNmyEiSfYgz1gVCesg",
name: "Mellow Pop Classics",
thumbnail: [
Thumbnail(
@ -471,7 +471,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_l7K78k4EkjcFojhd1617rmUjY-aet6-t0",
id: "RDCLAK5uy_l7K78k4EkjcFojhd1617rmUjY-aet6-t0",
name: "K-Pop Party Hits",
thumbnail: [
Thumbnail(
@ -500,7 +500,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nCVF_zUZizzRcojIUuYmaXxMoPgg2WMDo",
id: "RDCLAK5uy_nCVF_zUZizzRcojIUuYmaXxMoPgg2WMDo",
name: "Klangfarbe: German Pop Hits",
thumbnail: [
Thumbnail(
@ -529,7 +529,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_nGKsW16ocmP8l8wL1oMIyR53cu4N5fyKI",
id: "RDCLAK5uy_nGKsW16ocmP8l8wL1oMIyR53cu4N5fyKI",
name: "GIF Pop BR",
thumbnail: [
Thumbnail(
@ -558,7 +558,7 @@ MusicSearchFiltered(
from_ytm: true,
),
MusicPlaylistItem(
id: "VLRDCLAK5uy_mVJ3RRi_YBfUJnZnQxLAedQQcXHujbUcg",
id: "RDCLAK5uy_mVJ3RRi_YBfUJnZnQxLAedQQcXHujbUcg",
name: "Pump-Up Pop",
thumbnail: [
Thumbnail(

View file

@ -364,7 +364,7 @@ MusicSearchResult(
],
playlists: [
MusicPlaylistItem(
id: "VLPL46jG0sBz4EabjYqv0tVEd1RvrZRjfJ8m",
id: "PL46jG0sBz4EabjYqv0tVEd1RvrZRjfJ8m",
name: "Lieblingsmensch",
thumbnail: [
Thumbnail(
@ -391,7 +391,7 @@ MusicSearchResult(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPL-2Z-8cOvEixQ2EKumbXXW8XivJG6U7-D",
id: "PL-2Z-8cOvEixQ2EKumbXXW8XivJG6U7-D",
name: "Namika - Lieblingsmensch",
thumbnail: [
Thumbnail(
@ -418,7 +418,7 @@ MusicSearchResult(
from_ytm: false,
),
MusicPlaylistItem(
id: "VLPLDnJKuRrOR5sx_jZ8-dsweq1OdayL_kpz",
id: "PLDnJKuRrOR5sx_jZ8-dsweq1OdayL_kpz",
name: "Lieblingsmensch",
thumbnail: [
Thumbnail(