diff --git a/src/clients/directory/presence.rs b/src/clients/directory/presence.rs index 77e114aaa5..9fab6c1bd5 100644 --- a/src/clients/directory/presence.rs +++ b/src/clients/directory/presence.rs @@ -20,8 +20,8 @@ pub struct MixNodePresence { #[derive(Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct MixProviderPresence { - host: String, - pub_key: String, + pub host: String, + pub pub_key: String, } // Topology shows us the current state of the overall Nym network diff --git a/src/clients/directory/requests/presence_providers_post.rs b/src/clients/directory/requests/presence_providers_post.rs index e69de29bb2..8819926802 100644 --- a/src/clients/directory/requests/presence_providers_post.rs +++ b/src/clients/directory/requests/presence_providers_post.rs @@ -0,0 +1,84 @@ +use crate::clients::directory::presence::MixProviderPresence; +use reqwest::Response; + +pub struct Request { + base_url: String, + path: String, +} + +pub trait PresenceMixProviderPoster { + fn new(base_url: String) -> Self; + fn post(&self, presence: MixProviderPresence) -> Result; +} + +impl PresenceMixProviderPoster for Request { + fn new(base_url: String) -> Self { + Request { + base_url, + path: "/api/presence/providers".to_string(), + } + } + + fn post(&self, presence: MixProviderPresence) -> Result { + let url = format!("{}{}", self.base_url, self.path); + let client = reqwest::Client::new(); + let p = client.post(&url).json(&presence).send()?; + Ok(p) + } +} + +#[cfg(test)] +mod metrics_get_request { + use super::*; + + #[cfg(test)] + use mockito::mock; + + #[cfg(test)] + mod on_a_400_status { + use super::*; + + #[test] + fn it_returns_an_error() { + let _m = mock("POST", "/api/presence/providers") + .with_status(400) + .create(); + let req = Request::new(mockito::server_url()); + let presence = fixtures::new_presence(); + let result = req.post(presence); + assert_eq!(400, result.unwrap().status()); + _m.assert(); + } + } + + #[cfg(test)] + mod on_a_200 { + use super::*; + #[test] + fn it_returns_a_response_with_201() { + let json = r#"{ + "ok": true + }"#; + let _m = mock("POST", "/api/presence/providers") + .with_status(201) + .with_body(json) + .create(); + let req = Request::new(mockito::server_url()); + let presence = fixtures::new_presence(); + let result = req.post(presence); + assert_eq!(true, result.is_ok()); + _m.assert(); + } + } + #[cfg(test)] + mod fixtures { + use crate::clients::directory::presence::MixProviderPresence; + + pub fn new_presence() -> MixProviderPresence { + MixProviderPresence { + host: "foo.com".to_string(), + pub_key: "abc".to_string(), + } + } + } +}