use cookie::{Cookie, CookieJar};
use crate::{CookieExt, Request, Response};
fn test_cookie(name: &str, value: impl AsRef<str>) -> Cookie<'static> {
Cookie::build((name.to_owned(), value.as_ref().to_owned()))
.secure(true)
.build()
}
#[test]
fn test_request_cookies_default() {
let request = Request::empty();
let jar = request.cookies();
assert!(jar.get("nonexistent").is_none());
}
#[test]
fn test_request_cookies_with_jar() {
let mut request = Request::empty();
request.extensions_mut().insert(CookieJar::new());
let jar = request.cookies();
assert!(jar.get("nonexistent").is_none());
}
#[test]
fn test_request_cookies_mut_initializes() {
let mut request = Request::empty();
let jar = request.cookies_mut();
assert!(jar.get("nonexistent").is_none());
let _ = jar; let jar2 = request.cookies_mut();
assert!(jar2.get("nonexistent").is_none());
}
#[test]
fn test_request_cookies_mut_persists() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("test", "value"));
let jar2 = request.cookies();
assert_eq!(jar2.get("test").map(|c| c.value()), Some("value"));
}
#[test]
fn test_request_cookie_none() {
let request = Request::empty();
assert!(request.cookie("test").is_none());
}
#[test]
fn test_request_cookie_some() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("session", "abc123"));
let cookie = request.cookie("session");
assert!(cookie.is_some());
assert_eq!(cookie.unwrap().value(), "abc123");
}
#[test]
fn test_request_cookie_not_found() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("other", "value"));
assert!(request.cookie("session").is_none());
}
#[test]
fn test_request_cookie_with_string() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("test", "value"));
assert!(request.cookie("test").is_some());
let name = String::from("test");
assert!(request.cookie(name).is_some());
}
#[test]
fn test_response_cookies_default() {
let response = Response::empty();
let jar = response.cookies();
assert!(jar.get("nonexistent").is_none());
}
#[test]
fn test_response_cookies_with_jar() {
let mut response = Response::empty();
response.extensions_mut().insert(CookieJar::new());
let jar = response.cookies();
assert!(jar.get("nonexistent").is_none());
}
#[test]
fn test_response_cookies_mut_initializes() {
let mut response = Response::empty();
let jar = response.cookies_mut();
assert!(jar.get("nonexistent").is_none());
let _ = jar; let jar2 = response.cookies_mut();
assert!(jar2.get("nonexistent").is_none());
}
#[test]
fn test_response_cookies_mut_persists() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("test", "value"));
let jar2 = response.cookies();
assert_eq!(jar2.get("test").map(|c| c.value()), Some("value"));
}
#[test]
fn test_response_cookie_none() {
let response = Response::empty();
assert!(response.cookie("test").is_none());
}
#[test]
fn test_response_cookie_some() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("session", "xyz789"));
let cookie = response.cookie("session");
assert!(cookie.is_some());
assert_eq!(cookie.unwrap().value(), "xyz789");
}
#[test]
fn test_response_cookie_not_found() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("other", "value"));
assert!(response.cookie("session").is_none());
}
#[test]
fn test_response_cookie_with_string() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("test", "value"));
assert!(response.cookie("test").is_some());
let name = String::from("test");
assert!(response.cookie(name).is_some());
}
#[test]
fn test_request_multiple_cookies() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("cookie1", "value1"));
jar.add(test_cookie("cookie2", "value2"));
jar.add(test_cookie("cookie3", "value3"));
assert_eq!(request.cookie("cookie1").unwrap().value(), "value1");
assert_eq!(request.cookie("cookie2").unwrap().value(), "value2");
assert_eq!(request.cookie("cookie3").unwrap().value(), "value3");
}
#[test]
fn test_response_multiple_cookies() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("cookie1", "value1"));
jar.add(test_cookie("cookie2", "value2"));
jar.add(test_cookie("cookie3", "value3"));
assert_eq!(response.cookie("cookie1").unwrap().value(), "value1");
assert_eq!(response.cookie("cookie2").unwrap().value(), "value2");
assert_eq!(response.cookie("cookie3").unwrap().value(), "value3");
}
#[test]
fn test_request_empty_cookie_name() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("", "value"));
let cookie = request.cookie("");
assert!(cookie.is_some());
assert_eq!(cookie.unwrap().value(), "value");
}
#[test]
fn test_response_empty_cookie_name() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("", "value"));
let cookie = response.cookie("");
assert!(cookie.is_some());
assert_eq!(cookie.unwrap().value(), "value");
}
#[test]
fn test_request_special_cookie_value() {
let mut request = Request::empty();
let jar = request.cookies_mut();
jar.add(test_cookie("test", "value with spaces"));
let cookie = request.cookie("test");
assert_eq!(cookie.unwrap().value(), "value with spaces");
}
#[test]
fn test_response_special_cookie_value() {
let mut response = Response::empty();
let jar = response.cookies_mut();
jar.add(test_cookie("test", "value with spaces"));
let cookie = response.cookie("test");
assert_eq!(cookie.unwrap().value(), "value with spaces");
}
#[test]
fn test_cookies_isolation() {
let mut request = Request::empty();
let mut response = Response::empty();
request
.cookies_mut()
.add(test_cookie("req_cookie", "req_value"));
response
.cookies_mut()
.add(test_cookie("resp_cookie", "resp_value"));
assert!(request.cookie("resp_cookie").is_none());
assert!(response.cookie("req_cookie").is_none());
}
#[test]
fn test_request_cookies_cloned() {
let mut request = Request::empty();
request.cookies_mut().add(test_cookie("test", "value"));
let jar1 = request.cookies();
let jar2 = request.cookies();
assert_eq!(jar1.get("test").map(|c| c.value()), Some("value"));
assert_eq!(jar2.get("test").map(|c| c.value()), Some("value"));
}
#[test]
fn test_response_cookies_cloned() {
let mut response = Response::empty();
response.cookies_mut().add(test_cookie("test", "value"));
let jar1 = response.cookies();
let jar2 = response.cookies();
assert_eq!(jar1.get("test").map(|c| c.value()), Some("value"));
assert_eq!(jar2.get("test").map(|c| c.value()), Some("value"));
}
#[test]
fn test_request_cookies_mut_same_instance() {
let mut request = Request::empty();
{
let jar1 = request.cookies_mut();
jar1.add(test_cookie("test", "value1"));
}
{
let jar2 = request.cookies_mut();
jar2.add(test_cookie("test2", "value2"));
}
assert!(request.cookie("test").is_some());
assert!(request.cookie("test2").is_some());
}
#[test]
fn test_response_cookies_mut_same_instance() {
let mut response = Response::empty();
{
let jar1 = response.cookies_mut();
jar1.add(test_cookie("test", "value1"));
}
{
let jar2 = response.cookies_mut();
jar2.add(test_cookie("test2", "value2"));
}
assert!(response.cookie("test").is_some());
assert!(response.cookie("test2").is_some());
}