zapreq 0.1.4

A fast, friendly HTTP client for the terminal
Documentation
use crate::common;
use assert_cmd::Command;
use tempfile::TempDir;

fn zapreq(config_dir: &TempDir) -> Command {
    let mut cmd = Command::cargo_bin("http").expect("binary should build");
    cmd.env("ZAPREQ_CONFIG_DIR", config_dir.path());
    cmd
}

#[test]
fn session_persists_cookie_for_followup_requests() {
    let cfg = TempDir::new().expect("temp dir");
    let mut server = common::mock_server();

    let seed = server
        .mock("GET", "/seed")
        .with_status(200)
        .with_header("set-cookie", "sid=abc; Path=/")
        .with_body("ok")
        .create();
    zapreq(&cfg)
        .args([
            "GET",
            &format!("{}/seed", server.url()),
            "--session",
            "cookie",
        ])
        .assert()
        .success();
    seed.assert();

    let followup = server
        .mock("GET", "/profile")
        .match_header("cookie", "sid=abc")
        .with_status(200)
        .with_body("ok")
        .create();
    zapreq(&cfg)
        .args([
            "GET",
            &format!("{}/profile", server.url()),
            "--session",
            "cookie",
        ])
        .assert()
        .success();
    followup.assert();
}

#[test]
fn session_read_only_does_not_persist_cookie_changes() {
    let cfg = TempDir::new().expect("temp dir");
    let mut server = common::mock_server();

    let seed = server
        .mock("GET", "/seed")
        .with_status(200)
        .with_header("set-cookie", "sid=one; Path=/")
        .with_body("ok")
        .create();
    zapreq(&cfg)
        .args(["GET", &format!("{}/seed", server.url()), "--session", "ro"])
        .assert()
        .success();
    seed.assert();

    let read_only = server
        .mock("GET", "/readonly")
        .match_header("cookie", "sid=one")
        .with_status(200)
        .with_header("set-cookie", "sid=two; Path=/")
        .with_body("ok")
        .create();
    zapreq(&cfg)
        .args([
            "GET",
            &format!("{}/readonly", server.url()),
            "--session",
            "ro",
            "--session-read-only",
        ])
        .assert()
        .success();
    read_only.assert();

    let after = server
        .mock("GET", "/after")
        .match_header("cookie", "sid=one")
        .with_status(200)
        .with_body("ok")
        .create();
    zapreq(&cfg)
        .args(["GET", &format!("{}/after", server.url()), "--session", "ro"])
        .assert()
        .success();
    after.assert();
}