quartz-cli 1.3.1

The command-line tool to build and test HTTP requests.
Documentation
use crate::utils::*;

#[test]
fn it_can_set_query_param() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    let set_output = quartz.cmd(&["query", "set", "_v=99890"])?;
    let get_output = quartz.cmd(&["query", "get", "_v"])?;

    assert!(set_output.status.success(), "{}", set_output.stderr);
    assert_eq!(
        get_output.stdout.trim(),
        "99890",
        "did not store query param"
    );

    Ok(())
}

#[test]
fn it_can_set_query_param_with_intentional_equals_sign() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    let set_output = quartz.cmd(&["query", "set", "where=email=example@email.com"])?;
    let get_output = quartz.cmd(&["query", "get", "where"])?;

    assert!(set_output.status.success(), "{}", set_output.stderr);
    assert_eq!(
        get_output.stdout.trim(),
        "email=example@email.com",
        "did not store query param correctly"
    );

    Ok(())
}

#[test]
fn it_can_rm_query() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    quartz.cmd(&["query", "set", "fields=example"])?;
    let remove_output = quartz.cmd(&["query", "rm", "fields"])?;
    let get_output = quartz.cmd(&["query", "get", "fields"])?;

    assert!(remove_output.status.success(), "{}", remove_output.stderr);
    assert_eq!(get_output.stdout.trim(), "", "did not removed query");

    Ok(())
}

#[test]
fn it_can_rm_multiple_query() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    quartz.cmd(&[
        "query",
        "set",
        "fields=example",
        "where=email=example@email.com",
        "value=false",
    ])?;
    let remove_output = quartz.cmd(&["query", "rm", "fields", "where"])?;

    let get_output = quartz.cmd(&["query", "get", "fields"])?;
    assert!(remove_output.status.success(), "{}", remove_output.stderr);
    assert_eq!(get_output.stdout.trim(), "", "did not removed query");

    let get_output = quartz.cmd(&["query", "get", "where"])?;
    assert!(remove_output.status.success(), "{}", remove_output.stderr);
    assert_eq!(get_output.stdout.trim(), "", "did not removed query");

    let get_output = quartz.cmd(&["query", "get", "value"])?;
    assert!(remove_output.status.success(), "{}", remove_output.stderr);
    assert_eq!(
        get_output.stdout.trim(),
        "false",
        "removed query that shouldn't"
    );

    Ok(())
}

#[test]
fn rm_multiple_continues_on_err() -> TestResult {
    let quartz = Quartz::preset_httpbin()?;

    quartz.cmd(&[
        "query",
        "set",
        "fields=example",
        "where=email=example@email.com",
        "value=false",
    ])?;
    let output = quartz.cmd(&["query", "rm", "fields", "idontexist", "where"])?;
    assert!(!output.status.success(), "{}", output.stdout);

    let output = quartz.cmd(&["query", "ls"])?;
    assert!(!output.stdout.contains("fields"), "{}", output.stdout);
    assert!(!output.stdout.contains("where"), "{}", output.stdout);
    assert!(output.stdout.contains("value"), "Unproperly removed fields");

    Ok(())
}

#[test]
fn it_outputs_resolved_string() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    quartz.cmd(&[
        "query",
        "set",
        "_v=99890",
        "fields=lorem,ipsum",
        "helloString=true",
    ])?;

    let output = quartz.cmd(&["show", "query"])?;

    assert!(output.status.success(), "{}", output.stderr);
    assert_eq!(
        output.stdout.trim(),
        "_v=99890&fields=lorem,ipsum&helloString=true",
        "did not match queries"
    );

    Ok(())
}

#[test]
fn compatible_with_apply_env_option() -> TestResult {
    let quartz = Quartz::preset_using_sample_endpoint()?;

    quartz.cmd(&["var", "set", "someQuery=yay"])?;
    quartz.cmd(&["query", "set", "version={{someQuery}}"])?;

    let output = quartz.cmd(&["--apply-environment", "query", "get", "version"])?;
    assert!(output.status.success(), "{}", output.stderr);
    assert_eq!(output.stdout.trim(), "yay");

    let output = quartz.cmd(&["--apply-environment", "query", "ls"])?;
    assert!(output.status.success(), "{}", output.stderr);
    assert_eq!(output.stdout.trim(), "version=yay");

    Ok(())
}