rtest 0.2.2

integration test building framework
Documentation
use reqwest::Method;
use rtest_derive::rtest;

use crate::{shop, WebserverTestError, WebserverTestError::*, WebserverWithItems, WebserverWithUsers};

#[rtest(module = "webshop::users")]
pub async fn user_requires_name(server: &WebserverWithItems) -> Result<(), WebserverTestError> {
    let res = server
        .webserver
        .req(Method::POST, "users")
        .json(&1337)
        .send()
        .await
        .map_err(Reqwest)?;
    assert_eq!(422, res.status());
    Ok(())
}

#[rtest(module = "webshop::users")]
pub async fn cant_get_users(server: &WebserverWithItems) -> Result<(), WebserverTestError> {
    let res = server
        .webserver
        .req(Method::GET, "users")
        .send()
        .await
        .map_err(Reqwest)?;
    assert_eq!(405, res.status());
    Ok(())
}

#[rtest(module = "webshop::users")]
pub async fn add_users(server: WebserverWithItems) -> Result<WebserverWithUsers, WebserverTestError> {
    let res = server
        .webserver
        .req(Method::POST, "users")
        .json("Ava")
        .send()
        .await
        .map_err(Reqwest)?;
    let ava_id = res.json::<shop::UserId>().await.map_err(Response)?;

    let res = server
        .webserver
        .req(Method::POST, "users")
        .json("John")
        .send()
        .await
        .map_err(Reqwest)?;
    let john_id = res.json::<shop::UserId>().await.map_err(Response)?;
    assert_eq!(john_id, ava_id + 1);

    Ok(WebserverWithUsers {
        webserver: server.webserver,
        book_id: server.book_id,
        cookie_id: server.cookie_id,
        ava_id,
        john_id,
    })
}