rust-okx 0.6.3

Async Rust client for the OKX v5 REST API
Documentation
use crate::OkxClient;
use crate::test_util::MockTransport;

use super::StatusRequest;

const DOCS_RESPONSE: &str = r#"{
    "code": "0",
    "msg": "",
    "data": [{
        "begin": "1672823400000",
        "end": "1672823520000",
        "href": "",
        "preOpenBegin": "",
        "scheDesc": "",
        "serviceType": "8",
        "state": "completed",
        "maintType": "1",
        "env": "1",
        "system": "unified",
        "title": "Trading account system upgrade (in batches of accounts)"
    }]
}"#;

#[tokio::test]
async fn get_status_no_filter_parses_response() {
    let mock = MockTransport::new(DOCS_RESPONSE);
    let client = OkxClient::with_transport(mock.clone()).build();

    let items = client
        .status()
        .get_status(&StatusRequest::default())
        .await
        .unwrap();

    assert_eq!(items.len(), 1);
    assert_eq!(
        items[0].title,
        "Trading account system upgrade (in batches of accounts)"
    );
    assert_eq!(items[0].state, "completed");
    assert_eq!(items[0].begin.as_str(), "1672823400000");
    assert_eq!(items[0].end.as_str(), "1672823520000");
    assert!(items[0].pre_open_begin.is_empty());
    assert_eq!(items[0].service_type, "8");
    assert_eq!(items[0].maint_type, "1");
    assert_eq!(items[0].env, "1");
    assert_eq!(items[0].system, "unified");

    let req = mock.captured();
    assert_eq!(req.method, http::Method::GET);
    assert_eq!(req.query(), None);
    assert!(!req.is_signed());
}

#[tokio::test]
async fn get_status_state_filter_builds_query() {
    let mock = MockTransport::new(DOCS_RESPONSE);
    let client = OkxClient::with_transport(mock.clone()).build();

    client
        .status()
        .get_status(&StatusRequest::new().state("canceled"))
        .await
        .unwrap();

    let req = mock.captured();
    assert_eq!(req.query(), Some("state=canceled"));
    assert!(!req.is_signed());
}