use reqwest::Method;
use crate::{Credentials, Error, objects, request_builder};
request_builder!(
pub GetRequest {},
Method::GET,
("https://www.googleapis.com/drive/v3/about"),
);
impl GetRequest {
pub fn execute( &self ) -> Result<objects::About, Error> {
let response = self.send()?;
let about_object: objects::About = serde_json::from_str( &response.text()? )?;
Ok(about_object)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct About {
credentials: Credentials,
}
impl About {
pub fn new( credentials: &Credentials ) -> Self {
Self { credentials: credentials.clone() }
}
pub fn get( &self ) -> GetRequest {
GetRequest::new(&self.credentials)
}
}
#[cfg(test)]
mod tests {
use reqwest::Method;
use super::About;
use crate::ErrorKind;
use crate::utils::test::{VALID_CREDENTIALS, INVALID_CREDENTIALS};
fn get_resource() -> About {
About::new(&VALID_CREDENTIALS)
}
fn get_invalid_resource() -> About {
About::new(&INVALID_CREDENTIALS)
}
#[test]
fn new_test() {
let credentials = VALID_CREDENTIALS.clone();
let resource = About::new(&credentials);
assert_eq!(resource.credentials, credentials);
}
#[test]
fn get_test() {
let about_request = get_resource().get();
assert_eq!(about_request.method, Method::GET);
assert_eq!(&about_request.url, "https://www.googleapis.com/drive/v3/about");
}
#[test]
fn fields_test() {
let about_request = get_resource().get()
.fields("test-fields");
assert_eq!( about_request.fields, Some("test-fields".into()) );
}
#[test]
fn execute_test() {
let response = get_resource().get()
.fields("kind")
.execute();
assert!( response.is_ok() );
}
#[test]
fn execute_invalid_credentials_test() {
let response = get_invalid_resource().get()
.fields("kind")
.execute();
assert!( response.is_err() );
assert_eq!( response.unwrap_err().kind, ErrorKind::Response );
}
}