gotify-rs 0.1.0

A wrapper for the Gotify API.
Documentation
use httpmock::prelude::*;

use gotify_rs::*;

#[test]
fn test_application_apis_sync() {
    let server = MockServer::start();

    let list_app_mock = server.mock(|when, then| {
        when.method(GET).path("/application");
        then.status(200)
            .header("content-type", "application/json")
            .body(
                r#"[
                {
                  "description": "Backup server for the interwebs",
                  "id": 5,
                  "image": "image/image.jpeg",
                  "internal": false,
                  "name": "Backup Server",
                  "token": "AWH0wZ5r0Mbac.r"
                }
              ]"#,
            );
    });

    let url = server.url("/");
    let gotify = SyncGotify::new(&url, Some("fake_app_token"), Some("fake_client_token"));
    let apps = gotify.applications().unwrap();
    assert_eq!(apps.len(), 1);
    assert_eq!(apps[0].id, 5);
    assert_eq!(list_app_mock.hits(), 1);

    let app_name = "app_name".to_string();
    let description = "An application".to_string();
    let create_app_mock = server.mock(|when, then| {
        when.method(POST).path("/application");
        then.status(200)
            .header("content-type", "application/json")
            .body(format!(
                r#"
           {{
            "description": "{}",
            "id": 1,
            "image": "",
            "internal": false,
            "name": "{}",
            "token": "AWH0wZ5r0Mbac.r"
          }}
           "#,
                &description, &app_name
            ));
    });
    let new_app = gotify
        .create_application(app_name.clone(), description.clone())
        .unwrap();
    assert_eq!(new_app.name, app_name);
    assert_eq!(new_app.description, description);
    assert_eq!(create_app_mock.hits(), 1);
    assert_eq!(list_app_mock.hits(), 1);

    let new_app_name = "new_name".to_string();
    let new_description = "Updated application description".to_string();
    let update_app_mock = server.mock(|when, then| {
        when.method(PUT).path("/application/1");
        then.status(200)
            .header("content-type", "application/json")
            .body(format!(
                r#"
           {{
            "description": "{}",
            "id": 1,
            "image": "",
            "internal": false,
            "name": "{}",
            "token": "AWH0wZ5r0Mbac.r"
          }}
           "#,
                &new_description, &new_app_name
            ));
    });
    let new_app = gotify
        .update_application(1, new_app_name.clone(), Some(new_description.clone()))
        .unwrap();
    assert_eq!(new_app.name, new_app_name);
    assert_eq!(new_app.description, new_description);
    assert_eq!(update_app_mock.hits(), 1);
    assert_eq!(create_app_mock.hits(), 1);
    assert_eq!(list_app_mock.hits(), 1);
}