use super::ParseFrom;
use crate::query::rate::{RatePlaylistQuery, RateSongQuery};
use json_crawler::{JsonCrawler, JsonCrawlerIterator, JsonCrawlerOwned};
impl<'a> ParseFrom<RateSongQuery<'a>> for () {
fn parse_from(_: super::ProcessedResult<RateSongQuery<'a>>) -> crate::Result<Self> {
Ok(())
}
}
impl<'a> ParseFrom<RatePlaylistQuery<'a>> for () {
fn parse_from(p: super::ProcessedResult<RatePlaylistQuery<'a>>) -> crate::Result<Self> {
let json_crawler = JsonCrawlerOwned::from(p);
json_crawler
.navigate_pointer("/actions")?
.try_into_iter()?
.find_path("/addToToastAction")
.map(|_| ())
.map_err(Into::into)
}
}
#[cfg(test)]
mod tests {
use crate::auth::BrowserToken;
use crate::common::{PlaylistID, VideoID, YoutubeID};
use crate::query::rate::{RatePlaylistQuery, RateSongQuery};
#[tokio::test]
async fn test_rate_song_like() {
parse_test_value!(
"./test_json/rate_song_like_20240710.json",
(),
RateSongQuery::new(VideoID::from_raw(""), crate::common::LikeStatus::Liked),
BrowserToken
);
}
#[tokio::test]
async fn test_rate_song_dislike() {
parse_test_value!(
"./test_json/rate_song_dislike_20240710.json",
(),
RateSongQuery::new(VideoID::from_raw(""), crate::common::LikeStatus::Disliked),
BrowserToken
);
}
#[tokio::test]
async fn test_rate_song_indifferent() {
parse_test_value!(
"./test_json/rate_song_indifferent_20240710.json",
(),
RateSongQuery::new(
VideoID::from_raw(""),
crate::common::LikeStatus::Indifferent
),
BrowserToken
);
}
#[tokio::test]
async fn test_rate_playlist_like() {
parse_test_value!(
"./test_json/rate_playlist_like_20240710.json",
(),
RatePlaylistQuery::new(PlaylistID::from_raw(""), crate::common::LikeStatus::Liked),
BrowserToken
);
}
#[tokio::test]
async fn test_rate_playlist_dislike() {
parse_test_value!(
"./test_json/rate_playlist_dislike_20240710.json",
(),
RatePlaylistQuery::new(
PlaylistID::from_raw(""),
crate::common::LikeStatus::Disliked
),
BrowserToken
);
}
#[tokio::test]
async fn test_rate_playlist_indifferent() {
parse_test_value!(
"./test_json/rate_playlist_indifferent_20240710.json",
(),
RatePlaylistQuery::new(
PlaylistID::from_raw(""),
crate::common::LikeStatus::Indifferent
),
BrowserToken
);
}
}