diff --git a/src/endpoints/mod.rs b/src/endpoints/mod.rs index 8b13789..b32533b 100644 --- a/src/endpoints/mod.rs +++ b/src/endpoints/mod.rs @@ -1 +1 @@ - +mod ping; diff --git a/src/endpoints/ping.rs b/src/endpoints/ping.rs new file mode 100644 index 0000000..3cc38ff --- /dev/null +++ b/src/endpoints/ping.rs @@ -0,0 +1,12 @@ +use reqwest::Method; + +use crate::client::OnspringClient; +use crate::error::Result; + +impl OnspringClient { + /// Checks if the Onspring API is reachable. + pub async fn ping(&self) -> Result<()> { + self.request_no_content(Method::GET, "/Ping", &[], Option::<&()>::None) + .await + } +} diff --git a/tests/common/mod.rs b/tests/common/mod.rs new file mode 100644 index 0000000..1f29dfd --- /dev/null +++ b/tests/common/mod.rs @@ -0,0 +1,10 @@ +use onspring::OnspringClient; +use wiremock::MockServer; + +pub async fn setup() -> (MockServer, OnspringClient) { + let mock_server = MockServer::start().await; + let client = OnspringClient::builder("test-api-key") + .base_url(mock_server.uri()) + .build(); + (mock_server, client) +} diff --git a/tests/test_ping.rs b/tests/test_ping.rs new file mode 100644 index 0000000..1d2e838 --- /dev/null +++ b/tests/test_ping.rs @@ -0,0 +1,40 @@ +mod common; + +use wiremock::matchers::{header, method, path}; +use wiremock::{Mock, ResponseTemplate}; + +#[tokio::test] +async fn test_ping_success() { + let (mock_server, client) = common::setup().await; + + Mock::given(method("GET")) + .and(path("/Ping")) + .and(header("x-apikey", "test-api-key")) + .and(header("x-api-version", "2")) + .respond_with(ResponseTemplate::new(200)) + .mount(&mock_server) + .await; + + let result = client.ping().await; + assert!(result.is_ok()); +} + +#[tokio::test] +async fn test_ping_unauthorized() { + let (mock_server, client) = common::setup().await; + + Mock::given(method("GET")) + .and(path("/Ping")) + .respond_with(ResponseTemplate::new(401)) + .mount(&mock_server) + .await; + + let result = client.ping().await; + assert!(result.is_err()); + + if let Err(onspring::OnspringError::Api { status_code, .. }) = result { + assert_eq!(status_code, 401); + } else { + panic!("Expected Api error"); + } +}