rama 0.3.0

modular service framework
Documentation
use super::utils;

use rama::{
    futures::StreamExt,
    http::{
        StatusCode,
        headers::{ContentType, HeaderMapExt},
    },
};

use ahash::{HashSet, HashSetExt as _};
use serde::Deserialize;

#[tokio::test]
#[ignore]
async fn test_http_nd_json() {
    utils::init_tracing();

    let runner = utils::ExampleRunner::interactive("http_nd_json", None);

    #[derive(Debug, Clone, Deserialize)]
    #[allow(dead_code)]
    struct OrderEvent {
        item: String,
        quantity: u32,
        prepaid: bool,
    }

    let mut unique_events = HashSet::new();
    let mut event_count = 0;
    let response = runner
        .get("http://127.0.0.1:62041/orders")
        .send()
        .await
        .unwrap();

    assert_eq!(StatusCode::OK, response.status());
    assert!(
        response
            .headers()
            .typed_get::<ContentType>()
            .map(|ct| ct.eq(&ContentType::ndjson()))
            .unwrap_or_default()
    );

    let mut stream = response.into_body().into_json_stream::<OrderEvent>();
    while let Some(result) = stream.next().await {
        let order_event = result.unwrap();
        assert!(!order_event.item.is_empty());
        unique_events.insert(order_event.item);
        event_count += 1;
    }
    assert_eq!(28, event_count);
    assert_eq!(22, unique_events.len());
}