diff --git a/Cargo.toml b/Cargo.toml index 6271843..c875bb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,8 +20,8 @@ rustls-tls = ["reqwest/rustls-tls"] async-trait = "0.1" digest_auth = "0.3" reqwest = { version = "0.11", default-features = false } -url = "2.3" +url = "2.4" [dev-dependencies] tokio = { version = "1", features = ["full"] } -mockito = "0.31" +mockito = "1.1" diff --git a/src/blocking.rs b/src/blocking.rs index 69dc0b0..28e613c 100644 --- a/src/blocking.rs +++ b/src/blocking.rs @@ -85,19 +85,23 @@ mod tests { use crate::common::parse_digest_auth_header; use digest_auth::HttpMethod; - use mockito::{mock, Mock}; - use reqwest::blocking::Client; - use reqwest::{ - header::{HeaderMap, HeaderValue}, - StatusCode, - }; + use mockito::{Mock, Server}; + use reqwest::blocking::{Client, RequestBuilder}; + use reqwest::header::{HeaderMap, HeaderValue}; + use reqwest::StatusCode; + + const PATH: &str = "/test"; + + fn create_request(server: &Server) -> RequestBuilder { + Client::new().get(format!("{domain}{PATH}", domain = server.url())) + } #[test] fn given_non_digest_auth_endpoint_when_send_with_da_then_request_executed_normally() { // Given I have a GET request against a non digest auth endpoint - let path = "/test"; - let mock = mock("GET", path).with_status(200).create(); - let request = Client::new().get(format!("{domain}{path}", domain = mockito::server_url())); + let mut server = mockito::Server::new(); + let mock = server.mock("GET", PATH).with_status(200).create(); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").unwrap(); @@ -110,9 +114,9 @@ mod tests { #[test] fn given_non_digest_auth_endpoint_unauthorized_when_send_with_da_then_request_fails_with_401() { // Given I have a GET request against a non digest auth but authorized endpoint - let path = "/test"; - let mock = mock("GET", path).with_status(401).create(); - let request = Client::new().get(format!("{domain}{path}", domain = mockito::server_url())); + let mut server = mockito::Server::new(); + let mock = server.mock("GET", PATH).with_status(401).create(); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").unwrap(); @@ -125,23 +129,24 @@ mod tests { #[test] fn given_digest_auth_endpoint_authorized_when_send_with_da_then_request_succeeds() { // Given I have a GET request against a digest auth endpoint with valid 'www-authenticate' header - let path = "/test"; - let url = format!("{domain}{path}", domain = mockito::server_url()); + let mut server = mockito::Server::new(); let www_authenticate = "Digest realm=\"testrealm@host.com\",qop=\"auth,auth-int\",nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\",opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""; let mut header = HeaderMap::new(); header.insert("www-authenticate", HeaderValue::from_static(www_authenticate)); - let auth_header = parse_digest_auth_header(&header, path, HttpMethod::GET, None, "username", "password").unwrap(); + let auth_header = parse_digest_auth_header(&header, PATH, HttpMethod::GET, None, "username", "password").unwrap(); - let first_request = mock("GET", path) + let first_request = server + .mock("GET", PATH) .with_status(401) .with_header("www-authenticate", www_authenticate) .create(); - let second_request = mock("GET", path) + let second_request = server + .mock("GET", PATH) .with_header("Authorization", &auth_header.to_header_string()) .with_status(200) .create(); - let request = Client::new().get(url); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").unwrap(); diff --git a/src/lib.rs b/src/lib.rs index b14d594..99e4c37 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -136,18 +136,22 @@ mod tests { use crate::WithDigestAuth; use digest_auth::HttpMethod; - use mockito::{mock, Mock}; - use reqwest::{ - header::{HeaderMap, HeaderValue}, - Client, StatusCode, - }; + use mockito::{Mock, Server}; + use reqwest::header::{HeaderMap, HeaderValue}; + use reqwest::{Client, RequestBuilder, StatusCode}; + + const PATH: &str = "/test"; + + fn create_request(server: &Server) -> RequestBuilder { + Client::new().get(format!("{domain}{PATH}", domain = server.url())) + } #[tokio::test] async fn given_non_digest_auth_endpoint_when_send_with_da_then_request_executed_normally() { // Given I have a GET request against a non digest auth endpoint - let path = "/test"; - let mock = mock("GET", path).with_status(200).create(); - let request = Client::new().get(format!("{domain}{path}", domain = mockito::server_url())); + let mut server = mockito::Server::new(); + let mock = server.mock("GET", PATH).with_status(200).create(); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").await.unwrap(); @@ -160,9 +164,9 @@ mod tests { #[tokio::test] async fn given_non_digest_auth_endpoint_unauthorized_when_send_with_da_then_request_fails_with_401() { // Given I have a GET request against a non digest auth but authorized endpoint - let path = "/test"; - let mock = mock("GET", path).with_status(401).create(); - let request = Client::new().get(format!("{domain}{path}", domain = mockito::server_url())); + let mut server = mockito::Server::new(); + let mock = server.mock("GET", PATH).with_status(401).create(); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").await.unwrap(); @@ -175,23 +179,24 @@ mod tests { #[tokio::test] async fn given_digest_auth_endpoint_authorized_when_send_with_da_then_request_succeeds() { // Given I have a GET request against a digest auth endpoint with valid 'www-authenticate' header - let path = "/test"; - let url = format!("{domain}{path}", domain = mockito::server_url()); + let mut server = mockito::Server::new(); let www_authenticate = "Digest realm=\"testrealm@host.com\",qop=\"auth,auth-int\",nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\",opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""; let mut header = HeaderMap::new(); header.insert("www-authenticate", HeaderValue::from_static(www_authenticate)); - let auth_header = parse_digest_auth_header(&header, path, HttpMethod::GET, None, "username", "password").unwrap(); + let auth_header = parse_digest_auth_header(&header, PATH, HttpMethod::GET, None, "username", "password").unwrap(); - let first_request = mock("GET", path) + let first_request = server + .mock("GET", PATH) .with_status(401) .with_header("www-authenticate", www_authenticate) .create(); - let second_request = mock("GET", path) + let second_request = server + .mock("GET", PATH) .with_header("Authorization", &auth_header.to_header_string()) .with_status(200) .create(); - let request = Client::new().get(url); + let request = create_request(&server); // When I send with digest auth let response = request.send_with_digest_auth("username", "password").await.unwrap();