diff --git a/ruma-appservice-api/CHANGELOG.md b/ruma-appservice-api/CHANGELOG.md index 2b46d1f3..a3886f47 100644 --- a/ruma-appservice-api/CHANGELOG.md +++ b/ruma-appservice-api/CHANGELOG.md @@ -8,6 +8,10 @@ Breaking changes: * Fix endpoint versioning +Bug fixes: + +* Fix `push_events::v1::Request` serialization by sending a dictionary instead of an array on request body + # 0.2.0 Improvements: diff --git a/ruma-appservice-api/src/event/push_events/v1.rs b/ruma-appservice-api/src/event/push_events/v1.rs index a72307e1..c7fe4ac8 100644 --- a/ruma-appservice-api/src/event/push_events/v1.rs +++ b/ruma-appservice-api/src/event/push_events/v1.rs @@ -22,7 +22,6 @@ ruma_api! { pub txn_id: &'a str, /// A list of events. - #[ruma_api(body)] pub events: &'a [Raw], } @@ -43,3 +42,34 @@ impl Response { Self } } + +#[cfg(test)] +mod tests { + use ruma_api::{exports::http, OutgoingRequest}; + use ruma_common::Raw; + use ruma_events::AnyEvent; + use serde_json::json; + + use super::Request; + + #[test] + fn decode_request_contains_events_field() { + let dummy_event: AnyEvent = serde_json::from_value(json!({ + "content": {}, + "type": "m.dummy" + })) + .unwrap(); + let dummy_event = Raw::from(dummy_event); + let events = vec![dummy_event]; + + let req: http::Request> = Request { events: &events, txn_id: "any_txn_id" } + .try_into_http_request("https://homeserver.tld", Some("auth_tok")) + .unwrap(); + let json_body: serde_json::Value = serde_json::from_slice(&req.body()).unwrap(); + + assert_eq!( + 1, + json_body.as_object().unwrap().get("events").unwrap().as_array().unwrap().len() + ); + } +}