pushover 0.4.0

A wrapper for the Pushover API.
Documentation
extern crate mockito;
extern crate pushover;
extern crate tokio_core;

use mockito::{mock, Matcher};
use pushover::requests::message::{Limits, LimitsResponse};
use pushover::{Error, ErrorKind, API};

#[test]
fn test_sync_client_returns_pushover_error() {
    let _m = mock("GET", Matcher::Any)
        .with_body("{\"status\":0, \"request\":\"request_number\", \"errors\": [\"Error 1\", \"Error 2\"]}")
        .create();

    let request = Limits::new("token");
    let response = API::new().base_url(&mockito::server_url()).send(&request);

    match response.expect_err("Expected error") {
        Error(
            ErrorKind::PushoverError {
                status,
                errors,
                request,
            },
            _,
        ) => {
            assert_eq!(status, 0);
            assert_eq!(errors, vec!["Error 1", "Error 2"]);
            assert_eq!(request, "request_number");
        }
        _ => panic!("Did not receive PushoverError"),
    }
}

#[test]
fn test_sync_client_does_not_return_error() {
    let _m = mock("GET", Matcher::Any)
        .with_body("{\"status\":1, \"request\":\"request_number\", \"limit\": 1, \"remaining\": 2, \"reset\": 3}")
        .create();

    let request = Limits::new("token");
    let response = API::new().base_url(&mockito::server_url()).send(&request);

    match response {
        Ok(LimitsResponse {
            request,
            limit,
            remaining,
            reset,
        }) => {
            assert_eq!(request, "request_number");
            assert_eq!(limit, 1);
            assert_eq!(remaining, 2);
            assert_eq!(reset, 3);
        }
        _ => panic!("Received error"),
    }
}

#[test]
fn test_async_client_returns_pushover_error() {
    let _m = mock("GET", Matcher::Any)
        .with_body("{\"status\":0, \"request\":\"request_number\", \"errors\": [\"Error 1\", \"Error 2\"]}")
        .create();

    let api = API::new().base_url(&mockito::server_url());

    let request = Limits::new("token");
    let response = tokio_test::block_on(api.send_async(&request));

    match response.expect_err("Expected error") {
        Error(
            ErrorKind::PushoverError {
                status,
                errors,
                request,
            },
            _,
        ) => {
            assert_eq!(status, 0);
            assert_eq!(errors, vec!["Error 1", "Error 2"]);
            assert_eq!(request, "request_number");
        }
        _ => panic!("Did not receive PushoverError"),
    }
}

#[test]
fn test_async_client_does_not_return_error() {
    let _m = mock("GET", Matcher::Any)
        .with_body("{\"status\":1, \"request\":\"request_number\", \"limit\": 1, \"remaining\": 2, \"reset\": 3}")
        .create();

    let api = API::new().base_url(&mockito::server_url());

    let request = Limits::new("token");
    let response = tokio_test::block_on(api.send_async(&request));

    match response {
        Ok(LimitsResponse {
            request,
            limit,
            remaining,
            reset,
        }) => {
            assert_eq!(request, "request_number");
            assert_eq!(limit, 1);
            assert_eq!(remaining, 2);
            assert_eq!(reset, 3);
        }
        _ => panic!("Received error"),
    }
}