directory: presence mixnode post now working

This commit is contained in:
Dave Hrycyszyn
2019-12-11 14:10:41 +00:00
parent 1901727787
commit decebcf93f
2 changed files with 91 additions and 4 deletions
+4 -4
View File
@@ -11,10 +11,10 @@ pub struct CocoPresence {
#[derive(Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MixNodePresence {
host: String,
pub_key: String,
layer: u64,
last_seen: i64,
pub host: String,
pub pub_key: String,
pub layer: u64,
pub last_seen: i64,
}
#[derive(Deserialize, Serialize)]
@@ -0,0 +1,87 @@
use crate::clients::directory::presence::MixNodePresence;
use reqwest::Response;
pub struct Request {
base_url: String,
path: String,
}
pub trait PresenceMixNodesPoster {
fn new(base_url: String) -> Self;
fn post(&self, presence: MixNodePresence) -> Result<Response, reqwest::Error>;
}
impl PresenceMixNodesPoster for Request {
fn new(base_url: String) -> Self {
Request {
base_url,
path: "/api/presence/mixnodes".to_string(),
}
}
fn post(&self, presence: MixNodePresence) -> Result<Response, reqwest::Error> {
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/mixnodes")
.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/mixnodes")
.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::MixNodePresence;
pub fn new_presence() -> MixNodePresence {
MixNodePresence {
host: "foo.com".to_string(),
pub_key: "abc".to_string(),
last_seen: 666,
layer: 1,
}
}
}
}