cookie-rs 0.4.2

library for working with HTTP cookies
Documentation
use cookie_rs::prelude::*;

#[test]
fn cookie_jar_add_cookie() {
    let mut jar = CookieJar::default();
    let cookie = Cookie::new("name", "value");

    jar.add(cookie.clone());

    assert_eq!(jar.get("name"), Some(&cookie));
}

#[test]
fn cookie_jar_remove_cookie() {
    let mut jar = CookieJar::default();
    let cookie = Cookie::new("name", "value");

    jar.add(cookie.clone());
    jar.remove(cookie.name());

    assert!(jar.get("name").is_none());
}

#[test]
fn cookie_jar_empty_string() {
    let cookie_count = CookieJar::parse("").map(|j| j.cookie().len());

    assert_eq!(cookie_count, Ok(0))
}

#[test]
fn cookie_jar_empty_string2() {
    let cookie_count = CookieJar::parse(" ").map(|j| j.cookie().len());

    assert_eq!(cookie_count, Ok(0))
}

#[test]
fn cookie_jar_empty_string3() {
    let cookie_count = CookieJar::parse(";").map(|j| j.cookie().len());

    assert_eq!(cookie_count, Ok(0))
}

#[test]
fn cookie_jar_add_multiple_cookies() {
    let mut jar = CookieJar::default();
    let cookie1 = Cookie::new("name1", "value1");
    let cookie2 = Cookie::new("name2", "value2");

    jar.add(cookie1.clone());
    jar.add(cookie2.clone());

    assert_eq!(jar.get("name1"), Some(&cookie1));
    assert_eq!(jar.get("name2"), Some(&cookie2));
}

#[test]
fn cookie_jar_to_header_values() {
    let mut jar = CookieJar::default();
    let cookie1 = Cookie::builder("name1", "value1")
        .path("/")
        .secure(true)
        .build();
    let cookie2 = Cookie::builder("name2", "value2").http_only(true).build();

    jar.add(cookie1);
    jar.add(cookie2);

    let headers = jar.as_header_values();

    assert!(headers.contains(&"name1=value1; Path=/; Secure".to_string()));
    assert!(headers.contains(&"name2=value2; HttpOnly".to_string()));
}

#[test]
fn cookie_jar_parse_cookie_header() {
    let input = "name1=value1; name2=value2";
    let jar = CookieJar::parse(input).unwrap();

    let cookie1 = jar.get("name1").unwrap();
    assert_eq!(cookie1.name(), "name1");
    assert_eq!(cookie1.value(), "value1");

    let cookie2 = jar.get("name2").unwrap();
    assert_eq!(cookie2.name(), "name2");
    assert_eq!(cookie2.value(), "value2");
}

#[test]
fn cookie_jar_empty() {
    let jar = CookieJar::default();
    assert!(jar.cookie().is_empty());
}

#[test]
fn cookie_jar_overwrite_cookie() {
    let mut jar = CookieJar::default();
    let cookie1 = Cookie::new("name", "value1");
    let cookie2 = Cookie::new("name", "value2");

    jar.add(cookie1.clone());
    jar.add(cookie2.clone());

    assert_eq!(jar.get("name"), Some(&cookie2));
}

#[test]
fn cookie_jar_get_after_remove_from_parsed() {
    let mut jar = CookieJar::parse("session=abc123; user=bob").unwrap();

    jar.remove("session");

    assert!(jar.get("session").is_none());
    assert!(jar.get("user").is_some());
}

#[test]
fn cookie_jar_cookie_set_excludes_removed_from_parsed() {
    let mut jar = CookieJar::parse("a=1; b=2; c=3").unwrap();

    jar.remove("b");

    let cookies = jar.cookie();
    assert_eq!(cookies.len(), 2);
    assert!(cookies.iter().any(|c| c.name() == "a"));
    assert!(!cookies.iter().any(|c| c.name() == "b"));
    assert!(cookies.iter().any(|c| c.name() == "c"));
}

#[test]
fn cookie_jar_remove_then_add_same_name() {
    let mut jar = CookieJar::parse("session=old").unwrap();

    jar.remove("session");
    jar.add(Cookie::new("session", "new"));

    assert_eq!(jar.get("session").unwrap().value(), "new");
}

#[test]
fn cookie_jar_remove_nonexistent() {
    let mut jar = CookieJar::default();

    jar.remove("ghost");

    assert!(jar.get("ghost").is_none());
    assert!(jar.cookie().is_empty());
}

#[test]
fn cookie_jar_changes_count_after_operations() {
    let mut jar = CookieJar::default();

    jar.add(Cookie::new("x", "1"));
    jar.remove("x");

    assert_eq!(jar.changes().len(), 1);
    assert!(jar.get("x").is_none());
}

#[test]
fn cookie_jar_get_unknown_returns_none() {
    let jar = CookieJar::parse("a=1; b=2").unwrap();

    assert!(jar.get("c").is_none());
}

#[test]
fn cookie_jar_cookie_count_after_add_and_remove() {
    let mut jar = CookieJar::default();

    jar.add(Cookie::new("a", "1"));
    jar.add(Cookie::new("b", "2"));
    jar.add(Cookie::new("c", "3"));
    jar.remove("b");

    assert_eq!(jar.cookie().len(), 2);
    assert!(jar.get("a").is_some());
    assert!(jar.get("b").is_none());
    assert!(jar.get("c").is_some());
}