gitter 0.4.0

A library that provides Gitter API
Documentation
extern crate gitter;
extern crate serde;
extern crate serde_json;

use gitter::*;

fn get_gitter_api<'a>() -> Gitter<'a> {
    let token = std::env::var("GITTER_BOT_TOKEN")
        .unwrap_or_else(|_| "GITTER_TOKEN_VALUE".into());
    Gitter::new(token).unwrap()
}

#[test]
fn deserialize_user() {
    let user_json_str = "[{
  \"id\": \"53307734c3599d1de448e192\",
  \"username\": \"malditogeek\",
  \"displayName\": \"Mauro Pompilio\",
  \"url\": \"/malditogeek\",
  \"avatarUrlSmall\": \"https://avatars.githubusercontent.com/u/14751?\",
  \"avatarUrlMedium\": \"https://avatars.githubusercontent.com/u/14751?\"
}]";

    let user = serde_json::from_str::<Vec<User>>(user_json_str).unwrap();

    assert_eq!("53307734c3599d1de448e192", user[0].id);
}

#[test]
fn serialize_out_message() {
    let out_msg = OutMessage {
        text: "test `message` from @shmutalov"
    };
    let out_msg_expected = "{\"text\":\"test `message` from @shmutalov\"}";
    let out_msg_json = serde_json::to_string(&out_msg).unwrap();

    assert_eq!(&out_msg_expected, &out_msg_json);
}

#[test]
fn api_get_user() {
    let api = get_gitter_api();
    let user = api.get_user();

    assert!(user.is_ok());
}

#[test]
fn api_get_user_rooms() {
    let api = get_gitter_api();

    let user = api.get_user().unwrap();
    let rooms = api.get_user_rooms(&user.id);

    assert!(rooms.is_ok());
}

#[test]
fn api_get_rooms() {
    let api = get_gitter_api();
    let user = api.get_user().unwrap();

    let rooms = api.get_rooms();

    assert!(rooms.is_ok());

    let user_rooms = api.get_user_rooms(&user.id);

    assert!(user_rooms.is_ok());

    assert_eq!(rooms.unwrap().len(), user_rooms.unwrap().len());
}

#[test]
fn api_get_users_in_room() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let users = api.get_users_in_room(&rooms[0].id);

    assert!(users.is_ok());
}

#[test]
fn api_get_room() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let room = api.get_room(&rooms[0].id);

    assert!(room.is_ok());
}

#[test]
fn api_get_messages_without_pagination() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let messages = api.get_messages(&rooms[0].id, None);

    assert!(messages.is_ok());
}

#[test]
fn api_get_messages_with_pagination() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let pagination = Pagination {
        skip: 1,
        limit: 50,
        after_id: None,
        before_id: None,
        query: None,
    };
    let messages = api.get_messages(&rooms[0].id, Some(pagination));

    assert!(messages.is_ok());
}

#[test]
fn api_get_message() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let messages = api.get_messages(&rooms[0].id, None).unwrap();

    let message = api.get_message(&rooms[0].id, &messages[0].id);

    assert!(message.is_ok());
}

#[test]
fn api_get_room_id() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let room = rooms.into_iter().find(|x| x.uri.is_some()).unwrap();
    let room_id = api.get_room_id(room.uri.unwrap_or_else(|| "".to_owned()));

    assert!(room_id.is_ok());
}

#[test]
fn api_search_rooms() {
    let api = get_gitter_api();

    let rooms = api.get_rooms().unwrap();
    let room = rooms.into_iter().find(|x| x.uri.is_some()).unwrap();
    let search_result = api.search_rooms(&room.name);

    assert!(search_result.is_ok());
    assert!(!search_result.unwrap().rooms.is_empty());
}

#[test]
fn api_get_groups() {
    let api = get_gitter_api();
    let groups = api.get_groups();

    assert!(groups.is_ok());
}

#[test]
fn api_get_group_rooms() {
    let api = get_gitter_api();
    let groups = api.get_groups().unwrap();
    let rooms = api.get_group_rooms(&groups[0].id);

    assert!(rooms.is_ok());
}

#[test]
fn api_get_unread_items() {
    let api = get_gitter_api();
    let user = api.get_user().unwrap();
    let user_rooms = api.get_user_rooms(&user.id).unwrap();

    let unread_items = api.get_unread_items(&user.id, &user_rooms[0].id);

    assert!(unread_items.is_ok());
}

#[test]
fn api_get_user_organizations() {
    let api = get_gitter_api();
    let user = api.get_user().unwrap();
    let user_orgs = api.get_user_organizations(&user.id);

    assert!(user_orgs.is_ok());
}

#[test]
fn api_get_user_repositories() {
    let api = get_gitter_api();
    let user = api.get_user().unwrap();
    let user_repos = api.get_user_repositories(&user.id);

    assert!(user_repos.is_ok());
}

#[test]
#[ignore]
fn api_get_user_channels() {
    let api = get_gitter_api();
    let user = api.get_user().unwrap();
    let user_channels = api.get_user_channels(&user.id);

    assert!(user_channels.is_ok());
}

#[test]
fn api_send_message() {
    let api = get_gitter_api();
    let room_id = api.get_room_id("gitter-rs/testing").unwrap();

    let msg = "@shmutalov this is a `test` message.\n\n```rust\nfn main() {}```";
    let result = api.send_message(&room_id, &msg).unwrap();
    assert_eq!(&result.text, &msg);
}