backend_test_kit/
http.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::str::FromStr;

use reqwest::{Client, Method};
use serde_json::Value;

pub struct TestSuite {
    pub method: String,
    pub url: String,
    pub test_cases: Vec<TestCase>,
}

pub struct TestCase {
    pub json: Option<Value>,
    pub expect_status: fn(reqwest::StatusCode),
    pub expect_result: fn(Value),
}

impl TestSuite {
    pub async fn run(self) {
        let client = Client::new();
        let method = Method::from_str(&self.method).unwrap_or(Method::GET);

        for test_case in self.test_cases {
            let request = client
                .request(method.clone(), self.url.clone())
                .json(&test_case.json)
                .send();

            let response = request.await.unwrap();
            let status = response.status();
            let result = response.json::<Value>().await.unwrap();

            (test_case.expect_status)(status);
            (test_case.expect_result)(result);
        }
    }
}