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}