backend_test_kit/
http.rs

1use std::str::FromStr;
2
3use reqwest::{Client, Method};
4use serde_json::Value;
5
6pub struct TestSuite {
7    pub method: String,
8    pub url: String,
9    pub test_cases: Vec<TestCase>,
10}
11
12pub struct TestCase {
13    pub json: Option<Value>,
14    pub expect_status: fn(reqwest::StatusCode),
15    pub expect_result: fn(Value),
16}
17
18impl TestSuite {
19    pub async fn run(self) {
20        let client = Client::new();
21        let method = Method::from_str(&self.method).unwrap_or(Method::GET);
22
23        for test_case in self.test_cases {
24            let request = client
25                .request(method.clone(), self.url.clone())
26                .json(&test_case.json)
27                .send();
28
29            let response = request.await.unwrap();
30            let status = response.status();
31            let result = response.json::<Value>().await.unwrap();
32
33            (test_case.expect_status)(status);
34            (test_case.expect_result)(result);
35        }
36    }
37}