extern crate reqwest;
use reqwest::{
Client,
Response,
StatusCode,
};
use std::collections::HashMap;
pub trait HasBaseUrl {
fn get_base_url(&self) -> &str;
}
pub trait ClientHandler {
fn get_url(&self, url: &str) -> Response;
fn post_json(&self, url: &str, json: &HashMap<&str, &str>) -> Response;
fn post_body(&self, url: &str, body: &str) -> Response;
fn put_xml(&self, url: &str, body: &str) -> Response;
fn put_text(&self, url: &str, text: &str) -> Response;
}
pub trait ResponseHandler {
fn assert_200(&self);
fn assert_201(&self);
fn assert_204(&self);
fn assert_400(&self);
fn assert_401(&self);
fn assert_403(&self);
fn assert_404(&self);
fn assert_409(&self);
fn assert_500(&self);
}
impl ClientHandler for Client {
fn get_url(
&self,
url: &str,
) -> Response {
self.get(url)
.send()
.unwrap()
}
fn post_json(
&self,
url: &str,
json: &HashMap<&str, &str>,
) -> Response {
self.post(url)
.json(json)
.send()
.unwrap()
}
fn post_body(
&self,
url: &str,
body: &str,
) -> Response {
self.post(url)
.body(body.to_string())
.header(
reqwest::header::CONTENT_TYPE,
"text/plain"
)
.send()
.unwrap()
}
fn put_xml(
&self,
url: &str,
body: &str,
) -> Response {
self.put(url)
.body(body.to_string())
.header(
reqwest::header::CONTENT_TYPE,
"application/xml"
)
.send()
.unwrap()
}
fn put_text(
&self,
url: &str,
text: &str,
) -> Response {
self.put(url)
.body(text.to_string())
.header(
reqwest::header::CONTENT_TYPE,
"text/plain"
)
.send()
.unwrap()
}
}
impl ResponseHandler for Response {
fn assert_200(&self) {
assert_eq!(
self.status(),
StatusCode::OK,
);
}
fn assert_201(&self) {
assert_eq!(
self.status(),
StatusCode::CREATED,
);
}
fn assert_204(&self) {
assert_eq!(
self.status(),
StatusCode::NO_CONTENT,
);
}
fn assert_400(&self) {
assert_eq!(
self.status(),
StatusCode::BAD_REQUEST,
);
}
fn assert_401(&self) {
assert_eq!(
self.status(),
StatusCode::UNAUTHORIZED,
);
}
fn assert_403(&self) {
assert_eq!(
self.status(),
StatusCode::FORBIDDEN,
);
}
fn assert_404(&self) {
assert_eq!(
self.status(),
StatusCode::NOT_FOUND,
);
}
fn assert_409(&self) {
assert_eq!(
self.status(),
StatusCode::CONFLICT,
);
}
fn assert_500(&self) {
assert_eq!(
self.status(),
StatusCode::INTERNAL_SERVER_ERROR,
);
}
}
#[cfg(test)]
mod tests;