Skip to content

Commit ebaa70b

Browse files
feat: Make method and MethodExactMatcher case in-sensitive (#165)
1 parent 613b4f9 commit ebaa70b

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

src/matchers.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use regex::Regex;
1616
use serde::Serialize;
1717
use serde_json::Value;
1818
use std::convert::TryInto;
19-
use std::str;
19+
use std::str::{self, FromStr};
2020
use url::Url;
2121

2222
/// Implement the `Match` trait for all closures, out of the box,
@@ -65,20 +65,17 @@ pub struct MethodExactMatcher(Method);
6565
/// Shorthand for [`MethodExactMatcher::new`].
6666
pub fn method<T>(method: T) -> MethodExactMatcher
6767
where
68-
T: TryInto<Method>,
69-
<T as TryInto<Method>>::Error: std::fmt::Debug,
68+
T: AsRef<str>,
7069
{
7170
MethodExactMatcher::new(method)
7271
}
7372

7473
impl MethodExactMatcher {
7574
pub fn new<T>(method: T) -> Self
7675
where
77-
T: TryInto<Method>,
78-
<T as TryInto<Method>>::Error: std::fmt::Debug,
76+
T: AsRef<str>,
7977
{
80-
let method = method
81-
.try_into()
78+
let method = Method::from_str(&method.as_ref().to_ascii_uppercase())
8279
.expect("Failed to convert to HTTP method.");
8380
Self(method)
8481
}

tests/mocks.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,3 +452,44 @@ async fn custom_err() {
452452
];
453453
assert_eq!(actual_err, expected_err);
454454
}
455+
456+
#[async_std::test]
457+
async fn method_matcher_is_case_insensitive() {
458+
// Arrange
459+
let mock_server = MockServer::start().await;
460+
let response = ResponseTemplate::new(200).set_body_bytes("world");
461+
let mock = Mock::given(method("Get"))
462+
.and(PathExactMatcher::new("hello"))
463+
.respond_with(response);
464+
mock_server.register(mock).await;
465+
466+
// Act
467+
let response = reqwest::get(format!("{}/hello", &mock_server.uri()))
468+
.await
469+
.unwrap();
470+
471+
// Assert
472+
assert_eq!(response.status(), 200);
473+
assert_eq!(response.text().await.unwrap(), "world");
474+
}
475+
476+
#[async_std::test]
477+
async fn http_crate_method_can_be_used_directly() {
478+
use http::Method;
479+
// Arrange
480+
let mock_server = MockServer::start().await;
481+
let response = ResponseTemplate::new(200).set_body_bytes("world");
482+
let mock = Mock::given(method(Method::GET))
483+
.and(PathExactMatcher::new("hello"))
484+
.respond_with(response);
485+
mock_server.register(mock).await;
486+
487+
// Act
488+
let response = reqwest::get(format!("{}/hello", &mock_server.uri()))
489+
.await
490+
.unwrap();
491+
492+
// Assert
493+
assert_eq!(response.status(), 200);
494+
assert_eq!(response.text().await.unwrap(), "world");
495+
}

0 commit comments

Comments
 (0)