mod runtimes; mod server; use pretend::{pretend, Json, Pretend, Result, Url}; use pretend_reqwest::Client; use std::collections::HashMap; #[pretend] trait TestApi { #[request(method = "GET", path = "/method")] async fn get(&self) -> Result; #[request(method = "POST", path = "/method")] async fn post(&self) -> Result; #[request(method = "PUT", path = "/method")] async fn put(&self) -> Result; #[request(method = "PATCH", path = "/method")] async fn patch(&self) -> Result; #[request(method = "DELETE", path = "/method")] async fn delete(&self) -> Result; #[request(method = "GET", path = "/query")] async fn query(&self, query: &server::TestData) -> Result>>; #[request(method = "GET", path = "/headers")] #[header(name = "X-Test-Header-1", value = "abc")] #[header(name = "X-Test-Header-2", value = "{value}")] #[header(name = "X-{custom}", value = "custom")] async fn headers(&self, value: i32, custom: &str) -> Result>>; #[request(method = "POST", path = "/post/string")] #[header(name = "Content-Type", value = "text/plain")] async fn post_string(&self, body: &'static str) -> Result; #[request(method = "POST", path = "/post/json")] async fn post_json(&self, json: &server::TestData) -> Result>; #[request(method = "POST", path = "/post/form")] async fn post_form(&self, form: &server::TestData) -> Result>; } fn new_pretend() -> impl TestApi { let url = Url::parse(server::URL).unwrap(); let client = Client::default(); Pretend::for_client(client).with_url(url) } #[test] fn test_pretend() { server::test(|| { runtimes::block_on(async { test_get().await; test_post().await; test_put().await; test_patch().await; test_delete().await; test_query().await; test_headers().await; test_post_string().await; test_post_json().await; test_post_form().await; }) }); } async fn test_get() { let result = new_pretend().get().await; assert!(result.is_ok()); } async fn test_post() { let result = new_pretend().post().await; assert!(result.is_ok()); } async fn test_put() { let result = new_pretend().put().await; assert!(result.is_ok()); } async fn test_patch() { let result = new_pretend().patch().await; assert!(result.is_ok()); } async fn test_delete() { let result = new_pretend().delete().await; assert!(result.is_ok()); } async fn test_query() { let query = server::TestData { first: "Hello".to_string(), second: 123, }; let expected_args = [("first", "Hello"), ("second", "123")] .iter() .map(|(key, value)| (key.to_string(), value.to_string())) .collect::>(); let result = new_pretend().query(&query).await.unwrap(); assert_eq!(result.value(), expected_args); } async fn test_headers() { let result = new_pretend().headers(123, "test").await.unwrap(); let headers = result.value(); assert_eq!(headers.get("x-test-header-1").unwrap(), "abc"); assert_eq!(headers.get("x-test-header-2").unwrap(), "123"); assert_eq!(headers.get("x-test").unwrap(), "custom"); } async fn test_post_string() { let expected = "Hello"; let result = new_pretend().post_string(expected).await.unwrap(); assert_eq!(expected, result); } async fn test_post_json() { let json = server::TestData { first: "Hello".to_string(), second: 123, }; let result = new_pretend().post_json(&json).await.unwrap(); assert_eq!(result.value(), json); } async fn test_post_form() { let json = server::TestData { first: "Hello".to_string(), second: 123, }; let result = new_pretend().post_form(&json).await.unwrap(); assert_eq!(result.value(), json); }