mailerlite_rs/
client.rs

1use reqwest::{
2    header::{HeaderMap, ACCEPT, AUTHORIZATION, CONTENT_TYPE},
3    Client as reqwestClient,
4};
5
6#[derive(Debug, Clone)]
7pub struct Client {
8    pub request: reqwestClient,
9}
10
11impl Client {
12    pub fn new(api_key: String) -> Self {
13        let mut headers: HeaderMap = HeaderMap::new();
14        headers.insert(ACCEPT, "application/json".parse().unwrap());
15        headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
16        headers.insert(
17            AUTHORIZATION,
18            format!("Bearer {}", api_key).parse().unwrap(),
19        );
20
21        Self {
22            request: reqwestClient::builder()
23                .default_headers(headers)
24                .build()
25                .expect("Failed to build client"),
26        }
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33    use mockito::{Mock, Server, ServerGuard};
34
35    #[tokio::test]
36    async fn client_new() {
37        let mut server: ServerGuard = Server::new_async().await;
38        let mock: Mock = server
39            .mock("GET", "/hello")
40            .with_status(200)
41            .match_header("Accept", "application/json")
42            .match_header("Content-Type", "application/json")
43            .match_header("Authorization", "Bearer api_key")
44            .with_body(r#"{"message": "Hello world"}"#)
45            .create();
46
47        let client: Client = Client::new("api_key".to_string());
48
49        assert_eq!(
50            client
51                .request
52                .get(format!("{}/hello", server.url()))
53                .send()
54                .await
55                .expect("Failed to send request")
56                .status(),
57            200,
58        );
59        mock.assert();
60        assert!(mock.matched());
61    }
62}