use tokio::runtime::Runtime;
use crate::api::{
content::records::UserFavorites,
favorites::{
add_user_favorites, delete_user_favorites, get_user_favorite_ids, get_user_favorites,
},
service_state::QobuzApiService,
};
impl QobuzApiService {
delegate!(
pub fn add_user_favorites(item_ids: &[i32], item_type: &str) -> () = add_user_favorites
);
delegate!(
pub fn delete_user_favorites(item_ids: &[i32], item_type: &str) -> () = delete_user_favorites
);
delegate!(
pub fn get_user_favorites(item_type: &str, limit: Option<i32>, offset: Option<i32>) -> UserFavorites = get_user_favorites
);
delegate!(
pub fn get_user_favorite_ids() -> UserFavorites = get_user_favorite_ids
);
}
#[cfg(test)]
mod tests {
use anyhow::{Result, ensure};
use crate::api::dev_server::{MockServer, make_service};
#[test]
fn add_user_favorites_succeeds() -> Result<()> {
let server = MockServer::start(200, "{}")?;
let service = make_service(&server.base_url())?;
service.add_user_favorites(&[1, 2], "track")?;
Ok(())
}
#[test]
fn delete_user_favorites_succeeds() -> Result<()> {
let server = MockServer::start(200, "{}")?;
let service = make_service(&server.base_url())?;
service.delete_user_favorites(&[1, 2], "track")?;
Ok(())
}
#[test]
fn get_user_favorites_returns_ids() -> Result<()> {
let server = MockServer::start(200, r#"{"track_ids":[1,2]}"#)?;
let service = make_service(&server.base_url())?;
let favorites = service.get_user_favorites("track", Some(50), None)?;
ensure!(favorites.track_ids == Some(vec![1, 2]));
Ok(())
}
#[test]
fn get_user_favorite_ids_returns_ids() -> Result<()> {
let server = MockServer::start(200, r#"{"track_ids":[7]}"#)?;
let service = make_service(&server.base_url())?;
let favorites = service.get_user_favorite_ids()?;
ensure!(favorites.track_ids == Some(vec![7]));
Ok(())
}
}