rincon_client 0.1.1

A typesafe client for the ArangoDB Rest API
Documentation

extern crate tokio_core;

extern crate rincon_core;
extern crate rincon_connector;
extern crate rincon_client;
extern crate rincon_test_helper;

use rincon_core::api::connector::{Connector, Execute};
use rincon_core::api::types::Empty;
use rincon_connector::http::JsonHttpConnector;
use rincon_client::database::methods::*;
use rincon_client::user::methods::{CreateUser, DeleteUser};
use rincon_client::user::types::NewUser;

use rincon_test_helper::*;


#[test]
fn create_database_for_default_user() {
    arango_system_db_test(|conn, ref mut core| {

        let method = CreateDatabase::<Empty>::with_name("test_database_dd1");
        let work = conn.execute(method);
        let created = core.run(work).unwrap();

        assert!(created);

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_dd1"))).unwrap();
    });
}

#[test]
fn create_database_for_one_new_user() {
    arango_system_db_test(|conn, ref mut core| {

        let new_user = NewUser::<Empty>::with_name("test_user_d1", "");

        let method = CreateDatabase::with_name_for_users("test_database_d11",
            vec![new_user]);
        let work = conn.execute(method);
        let created = core.run(work).unwrap();

        assert!(created);

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d11"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d1"))).unwrap();
    });
}

#[test]
fn create_database_for_two_new_users() {
    arango_system_db_test(|conn, ref mut core| {

        let new_user1 = NewUser::<Empty>::with_name("test_user_d2", "");
        let new_user2 = NewUser::<Empty>::with_name("test_user_d3", "");

        let method = CreateDatabase::with_name_for_users("test_database_d22",
            vec![new_user1, new_user2]);
        let work = conn.execute(method);
        let created = core.run(work).unwrap();

        assert!(created);

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d22"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d2"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d3"))).unwrap();
    });
}

#[test]
fn create_database_for_one_existing_user() {
    arango_system_db_test(|conn, ref mut core| {

        let new_user = NewUser::<Empty>::with_name("test_user_d4", "");
        let user = core.run(conn.execute(CreateUser::new(new_user.clone()))).unwrap();

        assert_eq!("test_user_d4", user.name());

        let method = CreateDatabase::with_name_for_users("test_database_d31",
            vec![new_user]);
        let work = conn.execute(method);
        let created = core.run(work).unwrap();

        assert!(created);

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d31"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d4"))).unwrap();
    });
}

#[test]
fn create_database_for_two_existing_users_and_one_new_user() {
    arango_system_db_test(|conn, ref mut core| {

        let new_user1 = NewUser::<Empty>::with_name("test_user_d5", "");
        let user1 = core.run(conn.execute(CreateUser::new(new_user1.clone()))).unwrap();
        assert_eq!("test_user_d5", user1.name());

        let new_user2 = NewUser::<Empty>::with_name("test_user_d6", "");
        let user2 = core.run(conn.execute(CreateUser::new(new_user2.clone()))).unwrap();
        assert_eq!("test_user_d6", user2.name());

        let new_user3 = NewUser::<Empty>::with_name("test_user_d7", "");

        let method = CreateDatabase::with_name_for_users("test_database_d43",
            vec![new_user1, new_user2, new_user3]);
        let work = conn.execute(method);
        let created = core.run(work).unwrap();

        assert!(created);

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d43"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d5"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d6"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d7"))).unwrap();
    });
}

#[test]
fn get_current_database_default_for_root_user() {
    arango_system_db_test(|conn, ref mut core| {

        let method = GetCurrentDatabase::new();
        let work = conn.execute(method);
        let database = core.run(work).unwrap();

        assert_eq!("_system", database.name());

    }, |_, _| {
    });
}

#[test]
fn get_current_database_specific_for_root_user() {
    arango_system_db_test(|conn, ref mut core| {

        let _ = core.run(conn.execute(CreateDatabase::<Empty>::with_name("test_database_d05"))).unwrap();

        let user_ds = conn.datasource().clone();
        let connector = JsonHttpConnector::new(user_ds, &core.handle()).unwrap();
        let user_conn = connector.connection("test_database_d05");

        let method = GetCurrentDatabase::new();
        let work = user_conn.execute(method);
        let database = core.run(work).unwrap();

        assert_eq!("test_database_d05", database.name());

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d05"))).unwrap();
    });
}

#[test]
fn get_current_database_specific_for_user() {
    arango_system_db_test(|conn, ref mut core| {

        let user1 = NewUser::<Empty>::with_name("test_user_d8", "");

        let _ = core.run(conn.execute(CreateDatabase::with_name_for_users(
            "test_database_d81", vec![user1]))).unwrap();

        let user_ds = conn.datasource().clone()
            .with_basic_authentication("test_user_d8", "");
        let connector = JsonHttpConnector::new(user_ds, &core.handle()).unwrap();
        let user_conn = connector.connection("test_database_d81");

        let method = GetCurrentDatabase::new();
        let work = user_conn.execute(method);
        let database = core.run(work).unwrap();

        assert_eq!("test_database_d81", database.name());

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d81"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d8"))).unwrap();
    });
}

#[test]
fn list_databases() {
    arango_system_db_test(|conn, ref mut core| {

        let _ = core.run(conn.execute(CreateDatabase::<Empty>::with_name("test_database_d09"))).unwrap();

        let method = ListDatabases::new();
        let work = conn.execute(method);
        let databases = core.run(work).unwrap();

        assert!(databases.contains(&"_system".into()));
        assert!(databases.contains(&"test_database_d09".into()));

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d09"))).unwrap();
    });
}

#[test]
fn list_accessible_databases_for_root_user() {
    arango_system_db_test(|conn, ref mut core| {

        let _ = core.run(conn.execute(CreateDatabase::<Empty>::with_name("test_database_d010"))).unwrap();

        let method = ListAccessibleDatabases::new();
        let work = conn.execute(method);
        let databases = core.run(work).unwrap();

        assert!(databases.contains(&"_system".into()));
        assert!(databases.contains(&"test_database_d010".into()));

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d010"))).unwrap();
    });
}

#[test]
fn list_accessible_databases_for_test_user() {
    arango_system_db_test(|conn, ref mut core| {

        let user = NewUser::<Empty>::with_name("test_user_d9", "");

        let _ = core.run(conn.execute(CreateDatabase::with_name_for_users(
            "test_database_d91", vec![user.clone()]))).unwrap();
        let _ = core.run(conn.execute(CreateDatabase::with_name_for_users(
            "test_database_d92", vec![user]))).unwrap();

        let user_ds = conn.datasource().clone()
            .with_basic_authentication("test_user_d9", "");
        let connector = JsonHttpConnector::new(user_ds, &core.handle()).unwrap();
        let user_conn = connector.connection("test_database_d91");

        let method = ListAccessibleDatabases::new();
        let work = user_conn.execute(method);
        let databases = core.run(work).unwrap();

        assert!(databases.contains(&"test_database_d91".into()));
        assert!(databases.contains(&"test_database_d92".into()));
        assert_eq!(2, databases.len());

    }, |conn, ref mut core| {
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d91"))).unwrap();
        let _ = core.run(conn.execute(DropDatabase::with_name("test_database_d92"))).unwrap();
        let _ = core.run(conn.execute(DeleteUser::with_name("test_user_d9"))).unwrap();
    });
}