amtrak-api 0.2.0

Amtrak Async Rust API Client
Documentation
use amtrak_api::Client;
use mockito::Server;

#[tokio::test]
async fn test_single_station() -> Result<(), amtrak_api::Error> {
    let mut server = Server::new_async().await;
    let mock_server = server
        .mock("GET", "/stations")
        .with_body(
            r#"
{
    "ABE": {
        "name": "Aberdeen",
        "code": "ABE",
        "tz": "America/New_York",
        "lat": 39.508447,
        "lon": -76.16326,
        "address1": "18 East Bel Air Avenue",
        "address2": " ",
        "city": "Aberdeen",
        "state": "MD",
        "zip": 21001,
        "trains": []
    }
}"#,
        )
        .create_async()
        .await;

    let client = Client::with_base_url(server.url().as_str());
    let response = client.stations().await?;

    assert_eq!(response.len(), 1);

    let station = response.get("ABE").unwrap();
    assert_eq!(station.name, "Aberdeen");
    assert_eq!(station.code, "ABE");
    assert_eq!(station.lat, 39.508447);
    assert_eq!(station.lon, -76.16326);
    assert_eq!(station.address1, "18 East Bel Air Avenue");
    assert_eq!(station.address2, " ");
    assert_eq!(station.city, "Aberdeen");
    assert_eq!(station.state, "MD");
    assert_eq!(station.zip, 21001);
    assert_eq!(station.trains.len(), 0);

    mock_server.assert_async().await;

    Ok(())
}

#[tokio::test]
async fn test_empty_station() -> Result<(), amtrak_api::Error> {
    let mut server = Server::new_async().await;
    let mock_server = server
        .mock("GET", "/stations/ABC")
        .with_body("[]")
        .create_async()
        .await;
    let client = Client::with_base_url(server.url().as_str());
    let response = client.station("ABC").await?;

    assert_eq!(response.len(), 0);

    mock_server.assert_async().await;

    Ok(())
}