tide 0.13.0

Serve the web – HTTP server framework
Documentation
use async_std::prelude::*;
use std::time::Duration;

mod test_utils;
use test_utils::ServerTestingExt;

#[async_std::test]
async fn log_tests() {
    let mut logger = logtest::start();
    test_server_listen(&mut logger).await;
    test_only_log_once(&mut logger).await;
}

async fn test_server_listen(logger: &mut logtest::Logger) {
    let port = test_utils::find_port().await;
    let app = tide::new();
    let res = app
        .listen(("localhost", port))
        .timeout(Duration::from_millis(60))
        .await;
    assert!(res.is_err());

    let record = logger
        .find(|rec| rec.args().starts_with("Server listening"))
        .unwrap();
    assert_eq!(
        record.args(),
        format!("Server listening on http://[::1]:{}", port)
    );
}

async fn test_only_log_once(logger: &mut logtest::Logger) {
    let mut app = tide::new();
    app.at("/").nest({
        let mut app = tide::new();
        app.at("/").get(|_| async { Ok("nested") });
        app
    });
    app.get("/").await;

    let entries: Vec<_> = logger.collect();

    assert_eq!(
        1,
        entries
            .iter()
            .filter(|entry| entry.args() == "<-- Request received")
            .count()
    );

    assert_eq!(
        1,
        entries
            .iter()
            .filter(|entry| entry.args() == "--> Response sent")
            .count()
    );
}