zyst 1.0.3

Redis-compatible server
Documentation
use super::utils::{send_command, start_server, stop_server};

#[test]
fn test_hset() {
    let mut server = start_server();

    let response = send_command("HSET myhash name Smith first_name John age 21");
    assert!(response.contains("(integer) 3"));

    let response = send_command("HSET myhash age 34 city Paris");
    assert!(response.contains("(integer) 1"));

    stop_server(&mut server);
}

#[test]
fn test_expire() {
    let mut server = start_server();

    send_command("HSET myhash:expire name Smith first_name John age 21");
    let response = send_command("EXPIRE myhash:expire 3");
    assert!(response.contains("(integer) 1"));

    stop_server(&mut server);
}

#[test]
fn test_hget() {
    let mut server = start_server();

    let response = send_command("HSET myhash name Smith first_name John age 21");
    assert!(response.contains("(integer) 3"));

    let response = send_command("HGET myhash name");
    assert!(response.contains("Smith"));

    let response = send_command("HGET myhash first_name");
    assert!(response.contains("John"));

    let response = send_command("HGET myhash age");
    assert!(response.contains("21"));

    let response = send_command("HGET myhash city");
    assert!(response.contains("(nil)"));

    stop_server(&mut server);
}

#[test]
fn test_hgetall() {
    let mut server = start_server();

    let response = send_command("HSET myhashhgetall name Smith first_name John age 21");
    assert!(response.contains("(integer) 3"));

    let response = send_command("HGETALL myhashhgetall");
    assert!(response.contains("name"));
    assert!(response.contains("Smith"));
    assert!(response.contains("first_name"));
    assert!(response.contains("John"));
    assert!(response.contains("age"));
    assert!(response.contains("21"));

    let response = send_command("HGETALL non_existing_hash");
    assert!(response.contains("(empty array)"));

    stop_server(&mut server);
}

#[test]
fn test_hdel() {
    let mut server = start_server();

    let response =
        send_command("HSET myhashdel last_name Smith first_name John age 21 city Paris");
    assert!(response.contains("(integer) 4"));

    let response = send_command("HGETALL myhashdel");
    assert!(response.contains("last_name"));
    assert!(response.contains("Smith"));
    assert!(response.contains("first_name"));
    assert!(response.contains("John"));
    assert!(response.contains("age"));
    assert!(response.contains("21"));
    assert!(response.contains("city"));
    assert!(response.contains("Paris"));

    let response = send_command("HDEL myhashdel age");
    assert!(response.contains("(integer) 1"));

    let response = send_command("HGETALL myhashdel");
    assert!(!response.contains("age"));
    assert!(!response.contains("21"));

    let response = send_command("HDEL myhashdel last_name city");
    assert!(response.contains("(integer) 2"));

    let response = send_command("HGETALL myhashdel");
    assert!(!response.contains("last_name"));
    assert!(!response.contains("Smith"));
    assert!(!response.contains("city"));
    assert!(!response.contains("Paris"));

    let response = send_command("HDEL myhashdel first_name");
    assert!(response.contains("(integer) 1"));

    let response = send_command("HGETALL myhashdel");
    assert!(response.contains("(empty array)"));

    let response = send_command("HDEL non_existing_hash some_field");
    assert!(response.contains("(integer) 0"));

    stop_server(&mut server);
}