kxio/tests/net.rs

111 lines
2.7 KiB
Rust
Raw Normal View History

2024-11-04 10:22:31 +00:00
//
use kxio::net::{Error, MatchOn};
2024-11-04 10:22:31 +00:00
type TestResult = Result<(), Error>;
2024-11-06 20:40:56 +00:00
#[tokio::test]
async fn test_get() -> TestResult {
//given
2024-11-06 20:40:56 +00:00
let mut net = kxio::net::mock();
let client = net.client();
2024-11-04 10:22:31 +00:00
2024-11-06 20:40:56 +00:00
let url = "https://www.example.com";
let request = client.get(url).build().expect("build request");
let my_response = net
.response()
.status(200)
.body("Get OK")
.expect("request body");
2024-11-04 10:22:31 +00:00
net.on(request).respond(my_response.into());
2024-11-04 10:22:31 +00:00
//when
2024-11-06 20:40:56 +00:00
let response = net.send(client.get(url)).await?;
2024-11-04 10:22:31 +00:00
//then
2024-11-06 20:40:56 +00:00
assert_eq!(response.status(), http::StatusCode::OK);
assert_eq!(response.bytes().await.expect("response body"), "Get OK");
2024-11-04 10:22:31 +00:00
2024-11-06 20:40:56 +00:00
Ok(())
}
#[tokio::test]
async fn test_post() {
//given
2024-11-06 20:40:56 +00:00
let mut net = kxio::net::mock();
let client = net.client();
let url = "https://www.example.com";
let request = client.post(url).build().expect("build request");
let my_response = net
.response()
.status(200)
.body("Post OK")
.expect("request body");
2024-11-04 10:22:31 +00:00
net.on(request).respond(my_response.into());
2024-11-04 10:22:31 +00:00
//when
let response = net.send(client.post(url)).await.expect("reponse");
2024-11-04 10:22:31 +00:00
//then
2024-11-06 20:40:56 +00:00
assert_eq!(response.status(), http::StatusCode::OK);
assert_eq!(response.bytes().await.expect("response body"), "Post OK");
}
2024-11-04 10:22:31 +00:00
#[tokio::test]
async fn test_post_by_url() {
//given
let mut net = kxio::net::mock();
let client = net.client();
let url = "https://www.example.com";
let request = client.post(url).build().expect("build request");
let my_response = net
.response()
.status(200)
.body("Post OK")
.expect("request body");
net.on(request)
.match_on(vec![
// MatchOn::Method,
MatchOn::Url
])
.respond(my_response.into());
//when
// This request is a GET, not POST - but should still match
let response = net.send(client.get(url)).await.expect("response");
//then
assert_eq!(response.status(), http::StatusCode::OK);
assert_eq!(response.bytes().await.expect("response body"), "Post OK");
2024-11-04 10:22:31 +00:00
}
#[tokio::test]
#[should_panic]
async fn test_unused_post() {
//given
let mut net = kxio::net::mock();
let client = net.client();
let url = "https://www.example.com";
let request = client.post(url).build().expect("build request");
let my_response = net
.response()
.status(200)
.body("Post OK")
.expect("request body");
net.on(request).respond(my_response.into());
//when
// don't send the planned request
// let _response = net.send(client.post(url)).await.expect("send");
//then
// Drop implementation for net should panic
}