use serde::Deserialize;
use crate::{Itchio, ItchioError, SmallUser};
#[derive(Clone, Debug, Deserialize)]
struct WrappedUser {
user: SmallUser
}
impl Itchio {
pub async fn get_user(&self, user: u32) -> Result<SmallUser, ItchioError> {
let endpoint = format!("users/{}", user);
let response = self.request::<WrappedUser>(endpoint).await?;
Ok(response.user)
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::env;
use dotenv::dotenv;
#[tokio::test]
async fn good() {
dotenv().ok();
let client_secret = env::var("KEY").expect("KEY has to be set");
let api = Itchio::new(client_secret).unwrap();
let user = api.get_user(5771143).await.inspect_err(|err| eprintln!("Error spotted: {}", err));
assert!(user.is_ok())
}
#[tokio::test]
async fn bad_user() {
dotenv().ok();
let client_secret = env::var("KEY").expect("KEY has to be set");
let api = Itchio::new(client_secret).unwrap();
let user = api.get_user(0).await;
assert!(user.is_err_and(|err| matches!(err, ItchioError::NotFound)))
}
#[tokio::test]
async fn bad_key() {
let api = Itchio::new("bad_key".to_string()).unwrap();
let user = api.get_user(5771143).await;
assert!(user.is_err_and(|err| matches!(err, ItchioError::BadKey)))
}
}