#![allow(clippy::unwrap_used)]
use std::{env, path::Path};
use ytmapi_rs::{
auth::{BrowserToken, OAuthToken},
Result, YtMusic,
};
pub const COOKIE_PATH: &str = "cookie.txt";
pub const EXPIRED_OAUTH_PATH: &str = "oauth.json";
pub const INVALID_COOKIE: &str = "HSID=abc; SSID=abc; APISID=abc; SAPISID=abc; __Secure-1PAPISID=abc; __Secure-3PAPISID=abc; YSC=abc; LOGIN_INFO=abc; VISITOR_INFO1_LIVE=abc; _gcl_au=abc; PREF=tz=Australia.Perth&f6=40000000&f7=abc; VISITOR_PRIVACY_METADATA=abc; __Secure-1PSIDTS=abc; __Secure-3PSIDTS=abc; SID=abc; __Secure-1PSID=abc; __Secure-3PSID=abc; SIDCC=abc; __Secure-1PSIDCC=abc; __Secure-3PSIDCC=abc";
pub async fn new_standard_oauth_api() -> Result<YtMusic<OAuthToken>> {
let oauth_token = if let Ok(tok) = env::var("youtui_test_oauth") {
tok
} else {
tokio::fs::read_to_string(EXPIRED_OAUTH_PATH).await.unwrap()
};
Ok(YtMusic::from_oauth_token(
serde_json::from_slice(oauth_token.as_bytes()).unwrap(),
))
}
pub async fn new_standard_api() -> Result<YtMusic<BrowserToken>> {
if let Ok(cookie) = env::var("youtui_test_cookie") {
YtMusic::from_cookie(cookie).await
} else {
YtMusic::from_cookie_file(Path::new(COOKIE_PATH)).await
}
}
macro_rules! generate_query_test {
($(#[$m:meta])*
$fname:ident,$query:expr) => {
#[tokio::test]
async fn $fname() {
let api = crate::utils::new_standard_api().await.unwrap();
api.query($query)
.await
.expect("Expected query to run succesfully under browser auth");
}
};
}
macro_rules! generate_stream_test {
($(#[$m:meta])*
$fname:ident,$query:expr) => {
#[tokio::test]
async fn $fname() {
use futures::stream::{StreamExt, TryStreamExt};
let api = crate::utils::new_standard_api().await.unwrap();
let query = $query;
let stream = api.stream(&query);
tokio::pin!(stream);
stream
.take(5)
.try_collect::<Vec<_>>()
.await
.expect("Expected all results from browser stream to suceed");
}
};
}