use crate::http::types::{HeaderMap, HttpData};
use crate::http::util::*;
use reqwest::header;
use std::collections::HashMap;
#[test]
fn test_get_links_no_header() {
crate::init().unwrap();
let headers = HeaderMap::new();
assert_eq!(HashMap::new(), get_links(&headers).unwrap());
}
#[test]
fn test_get_links_no_values() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(header::LINK.as_str().to_owned(), Vec::new());
assert_eq!(HashMap::new(), get_links(&headers).unwrap());
}
#[test]
fn test_get_links_multiple_values_single_urls() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![
HttpData::Text("<http://www.google.com/>; rel=\"first\"".to_owned()),
HttpData::Text("<http://www.yahoo.com/>; rel=\"next\"".to_owned()),
],
);
let mut expected = HashMap::new();
expected.insert(
"first".to_owned(),
vec!["http://www.google.com/".parse().unwrap()],
);
expected.insert(
"next".to_owned(),
vec!["http://www.yahoo.com/".parse().unwrap()],
);
assert_eq!(expected, get_links(&headers).unwrap());
}
#[test]
fn test_get_links_multiple_values_multiple_urls() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![
HttpData::Text(
"<http://www.yahoo.com/>; rel=\"next\", <http://www.google.com/>; rel=\"first\""
.to_owned(),
),
HttpData::Text(
"<http://doc.rust-lang.org/>; rel=\"prev\", <http://www.crates.io/>; rel=\"last\""
.to_owned(),
),
],
);
let mut expected = HashMap::new();
expected.insert(
"first".to_owned(),
vec!["http://www.google.com/".parse().unwrap()],
);
expected.insert(
"next".to_owned(),
vec!["http://www.yahoo.com/".parse().unwrap()],
);
expected.insert(
"prev".to_owned(),
vec!["http://doc.rust-lang.org/".parse().unwrap()],
);
expected.insert(
"last".to_owned(),
vec!["http://www.crates.io/".parse().unwrap()],
);
assert_eq!(expected, get_links(&headers).unwrap());
}
#[test]
fn test_get_links_multiple_values_empty() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![HttpData::Text("".to_owned()), HttpData::Text("".to_owned())],
);
assert_eq!(HashMap::new(), get_links(&headers).unwrap());
}
#[test]
fn test_get_links_single_value_multiple_urls() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![HttpData::Text(
"<http://www.yahoo.com/>; rel=\"next\", <http://www.google.com/>; rel=\"first\""
.to_owned(),
)],
);
let mut expected = HashMap::new();
expected.insert(
"first".to_owned(),
vec!["http://www.google.com/".parse().unwrap()],
);
expected.insert(
"next".to_owned(),
vec!["http://www.yahoo.com/".parse().unwrap()],
);
assert_eq!(expected, get_links(&headers).unwrap());
}
#[test]
fn test_get_links_single_value_single_url() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![HttpData::Text(
"<http://www.google.com/>; rel=\"next\"".to_owned(),
)],
);
let mut expected = HashMap::new();
expected.insert(
"next".to_owned(),
vec!["http://www.google.com/".parse().unwrap()],
);
assert_eq!(expected, get_links(&headers).unwrap());
}
#[test]
fn test_get_links_single_value_empty() {
crate::init().unwrap();
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![HttpData::Text("".to_owned())],
);
assert_eq!(HashMap::new(), get_links(&headers).unwrap());
}
fn link_headers(value: &str) -> HeaderMap {
let mut headers = HeaderMap::new();
headers.insert(
header::LINK.as_str().to_owned(),
vec![HttpData::Text(value.to_owned())],
);
headers
}
#[test]
fn test_get_links_missing_angle() {
crate::init().unwrap();
assert!(get_links(&link_headers("http://example.com/>; rel=\"next\"")).is_err());
}
#[test]
fn test_get_links_unterminated_angle() {
crate::init().unwrap();
assert!(get_links(&link_headers("<http://example.com/; rel=\"next\"")).is_err());
}
#[test]
fn test_get_links_missing_rel_attribute() {
crate::init().unwrap();
assert!(get_links(&link_headers("<http://example.com/>; foo=\"bar\"")).is_err());
}
#[test]
fn test_get_links_unterminated_quote() {
crate::init().unwrap();
assert!(get_links(&link_headers("<http://example.com/>; rel=\"next")).is_err());
}