dimescheduler 0.1.0

Official Rust client library for the Dime.Scheduler API.
Documentation
use crate::{entities, types};

#[test]
fn entity_serializes_only_set_fields_in_camel_case() {
    let tag = entities::Tag {
        code: "VIP".into(),
        name: Some("VIP customer".into()),
        ..Default::default()
    };
    let json = serde_json::to_value(&tag).unwrap();
    assert_eq!(
        json,
        serde_json::json!({ "code": "VIP", "name": "VIP customer" })
    );
}

#[test]
fn keyword_field_uses_wire_name_type() {
    let dep = entities::TaskDependency {
        type_: Some(1),
        ..Default::default()
    };
    let json = serde_json::to_value(&dep).unwrap();
    assert_eq!(json["type"], 1);
    assert!(json.get("type_").is_none());
}

#[test]
fn enums_round_trip_as_integers() {
    let json = serde_json::to_string(&entities::SchedulingMode::default()).unwrap();
    assert_eq!(json, "0");
    let parsed: entities::SchedulingMode = serde_json::from_str("1").unwrap();
    assert_ne!(parsed, entities::SchedulingMode::default());
}

#[test]
fn unknown_fields_are_ignored_and_api_response_decodes() {
    let body = r#"{"success":true,"message":"ok","status":200,"phrase":"OK","somethingNew":42}"#;
    let r: types::DimeSchedulerApiResponse = serde_json::from_str(body).unwrap();
    assert_eq!(r.success, Some(true));
    assert_eq!(r.status.map(|s| s.0), Some(200));
}

#[test]
fn pascal_case_wire_names_are_renamed() {
    let e: types::WebApiException =
        serde_json::from_str(r#"{"Error":"e","Description":"d","Code":"c","Link":null}"#).unwrap();
    assert_eq!(e.description.as_deref(), Some("d"));
    let back = serde_json::to_value(&e).unwrap();
    assert_eq!(back["Description"], "d");
}

#[test]
fn recursive_models_are_boxed_and_default_constructible() {
    let task = crate::models::Task::default();
    let json = serde_json::to_value(&task).unwrap();
    assert!(json.is_object());
}