authy 0.9.8

Bindings for the Authy two factor web service.
Documentation
extern crate authy;

#[cfg(test)]
mod phone {
    const API_URL: &'static str = "https://sandbox-api.authy.com";
    const API_KEY: &'static str = "bf12974d70818a08199d17d5e2bae630";

    use super::authy::{Client, Status, AuthyError};
    use super::authy::api::phone::{self, ContactType};

    #[test]
    fn info() {
        let mut c = Client::new(API_URL, API_KEY);
        c.retry_wait = 3000;
        c.retry_count = 10;
        let (status, info) = phone::info(&c, 54, "317-338-9302", None).expect("PhoneInfo");
        assert!(status.success);
        assert_eq!(info.phone_type, "landline");

        // On the sandbox, info doesn't validate the country or phone are
        // correct, just that the params exist. There is no way to write a
        // fail case.
    }

    #[test]
    fn start_sms() {
        let mut c = Client::new(API_URL, API_KEY);
        c.retry_wait = 3000;
        c.retry_count = 10;
        let (status, info) = phone::start(&c, ContactType::SMS, 54, "317-338-9302", None, None).expect("PhoneVerification");
        assert!(status.success);
        assert_eq!(info.carrier, "Google Voice");
        assert_eq!(info.message, "Text message sent to +54 317-338-9302.");
    }


    #[test]
    fn start_fail() {
        let mut c = Client::new(API_URL, API_KEY);
        c.retry_wait = 3000;
        c.retry_count = 10;
        let res = phone::start(&c, ContactType::Call, 54, "555-9302", None, None);

        match res {
            Err(AuthyError::BadRequest(Status{success, message, ..})) => {
                assert!(! success);
                assert_eq!(message, "Phone number is invalid");
            }
            o => unreachable!("Expecting AuthyError::BadRequest, got: {:?}", o),
        }
    }

    #[test]
    #[ignore]
    // Gave up - This fails on sandbox because the verification start
    // doesn't actually kick off a verification.
    fn check() {
        let mut c = Client::new(API_URL, API_KEY);
        c.retry_wait = 3000;
        c.retry_count = 10;
        let (status, _) = phone::start(&c, ContactType::Call, 54, "317-555-9302", None, None).expect("PhoneVerification");
        assert!(status.success);

        let status = phone::check(&c, 54, "317-555-9302", "0000").expect("Status");
        assert!(status.success);
    }
}