1use super::ParseFrom;
2use crate::query::rate::{RatePlaylistQuery, RateSongQuery};
3use json_crawler::{JsonCrawler, JsonCrawlerIterator, JsonCrawlerOwned};
4
5impl<'a> ParseFrom<RateSongQuery<'a>> for () {
6 fn parse_from(_: super::ProcessedResult<RateSongQuery<'a>>) -> crate::Result<Self> {
7 Ok(())
12 }
13}
14impl<'a> ParseFrom<RatePlaylistQuery<'a>> for () {
15 fn parse_from(p: super::ProcessedResult<RatePlaylistQuery<'a>>) -> crate::Result<Self> {
16 let json_crawler = JsonCrawlerOwned::from(p);
20 json_crawler
22 .navigate_pointer("/actions")?
23 .try_into_iter()?
24 .find_path("/addToToastAction")
25 .map(|_| ())
26 .map_err(Into::into)
27 }
28}
29#[cfg(test)]
30mod tests {
31 use crate::auth::BrowserToken;
32 use crate::common::{PlaylistID, VideoID, YoutubeID};
33 use crate::query::rate::{RatePlaylistQuery, RateSongQuery};
34
35 #[tokio::test]
36 async fn test_rate_song_like() {
37 parse_test_value!(
38 "./test_json/rate_song_like_20240710.json",
39 (),
40 RateSongQuery::new(VideoID::from_raw(""), crate::common::LikeStatus::Liked),
41 BrowserToken
42 );
43 }
44 #[tokio::test]
45 async fn test_rate_song_dislike() {
46 parse_test_value!(
47 "./test_json/rate_song_dislike_20240710.json",
48 (),
49 RateSongQuery::new(VideoID::from_raw(""), crate::common::LikeStatus::Disliked),
50 BrowserToken
51 );
52 }
53 #[tokio::test]
54 async fn test_rate_song_indifferent() {
55 parse_test_value!(
56 "./test_json/rate_song_indifferent_20240710.json",
57 (),
58 RateSongQuery::new(
59 VideoID::from_raw(""),
60 crate::common::LikeStatus::Indifferent
61 ),
62 BrowserToken
63 );
64 }
65 #[tokio::test]
66 async fn test_rate_playlist_like() {
67 parse_test_value!(
68 "./test_json/rate_playlist_like_20240710.json",
69 (),
70 RatePlaylistQuery::new(PlaylistID::from_raw(""), crate::common::LikeStatus::Liked),
71 BrowserToken
72 );
73 }
74 #[tokio::test]
75 async fn test_rate_playlist_dislike() {
76 parse_test_value!(
77 "./test_json/rate_playlist_dislike_20240710.json",
78 (),
79 RatePlaylistQuery::new(
80 PlaylistID::from_raw(""),
81 crate::common::LikeStatus::Disliked
82 ),
83 BrowserToken
84 );
85 }
86 #[tokio::test]
87 async fn test_rate_playlist_indifferent() {
88 parse_test_value!(
89 "./test_json/rate_playlist_indifferent_20240710.json",
90 (),
91 RatePlaylistQuery::new(
92 PlaylistID::from_raw(""),
93 crate::common::LikeStatus::Indifferent
94 ),
95 BrowserToken
96 );
97 }
98}