add test + json errors
This commit is contained in:
+34
-6
@@ -87,13 +87,9 @@ where
|
||||
}
|
||||
|
||||
fn check_sig_header(secret_key: &[u8], sig_header: &[u8], body: &[u8]) -> Result<(), AppError> {
|
||||
let sig_header_decoded = hex::decode(sig_header).map_err(|err| anyhow!(err))?;
|
||||
let sig_header_decoded = hex::decode(sig_header).map_err(|_| AppError::WebHookSigHeaderInvalidErr)?;
|
||||
|
||||
let webhook_sig_header_secret =
|
||||
std::env::var("WEBHOOK_SIG_HEADER_SECRET").map_err(|err| anyhow!(err))?;
|
||||
|
||||
let mut mac = Hmac::<Sha256>::new_from_slice(&webhook_sig_header_secret.into_bytes())
|
||||
.map_err(|err| anyhow!(err))?;
|
||||
let mut mac = Hmac::<Sha256>::new_from_slice(secret_key).map_err(|err| anyhow!(err))?;
|
||||
|
||||
mac.update(body);
|
||||
|
||||
@@ -105,3 +101,35 @@ fn check_sig_header(secret_key: &[u8], sig_header: &[u8], body: &[u8]) -> Result
|
||||
false => Err(AppError::WebHookSigHeaderInvalidErr),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn valid_json_bytes_parse_to_value() {
|
||||
let body = serde_json::to_vec(
|
||||
&json!({"action": "created", "pull_request": {"id": 1}, "comment": {"body": "hi"}}),
|
||||
)
|
||||
.unwrap();
|
||||
let Json(value) = Json::<Value>::from_bytes(&body).unwrap();
|
||||
assert_eq!(value["action"], "created");
|
||||
assert_eq!(value["pull_request"]["id"], 1);
|
||||
assert_eq!(value["comment"]["body"], "hi");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn malformed_json_bytes_return_malformed_error() {
|
||||
let body = b"not valid json";
|
||||
let result = Json::<Value>::from_bytes(body);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn empty_body_returns_malformed_error() {
|
||||
let body = b"";
|
||||
let result = Json::<Value>::from_bytes(body);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user