Test for finding an avatar in a room via sliding sync

This commit is contained in:
Andy Balaam
2023-06-07 15:42:39 +01:00
committed by Benjamin Bouvier
parent 6444848511
commit 76a7ad0cbf
+66 -1
View File
@@ -276,7 +276,14 @@ impl BaseClient {
#[cfg(test)]
mod test {
use ruma::{device_id, room_id, uint, user_id, RoomId};
use ruma::{
device_id, event_id,
events::{room::avatar::RoomAvatarEventContent, StateEventContent},
mxc_uri, room_id,
serde::Raw,
uint, user_id, MxcUri, RoomId, UserId,
};
use serde_json::{json, Value as JsonValue};
use super::*;
use crate::SessionMeta;
@@ -324,6 +331,26 @@ mod test {
assert_eq!(client_room.name(), Some("little room".to_owned()));
}
#[tokio::test]
async fn avatar_is_found_when_processing_sliding_sync_response() {
// Given a logged-in client
let client = logged_in_client().await;
let room_id = room_id!("!r:e.uk");
let user_id = user_id!("@u:e.uk");
// When I send sliding sync response containing a room with an avatar
let room = room_with_avatar(mxc_uri!("mxc://e.uk/med1"), user_id);
let response = response_with_room(room_id, room).await;
client.process_sliding_sync(&response).await.expect("Failed to process sync");
// Then the room in the client has the avatar
let client_room = client.get_room(room_id).expect("No room found");
assert_eq!(
client_room.avatar_url().expect("No avatar URL").media_id().expect("No media ID"),
"med1"
);
}
async fn logged_in_client() -> BaseClient {
let client = BaseClient::new();
client
@@ -341,4 +368,42 @@ mod test {
response.rooms.insert(room_id.to_owned(), room);
response
}
fn room_with_avatar(avatar_uri: &MxcUri, user_id: &UserId) -> v4::SlidingSyncRoom {
let mut room = v4::SlidingSyncRoom::new();
let mut avatar_event_content = RoomAvatarEventContent::new();
avatar_event_content.url = Some(avatar_uri.to_owned());
room.required_state.push(
Raw::new(&make_state_event(user_id, "", avatar_event_content, None))
.expect("Failed to create state event")
.cast(),
);
room
}
fn make_state_event<C: StateEventContent>(
sender: &UserId,
state_key: &str,
content: C,
prev_content: Option<C>,
) -> JsonValue {
let unsigned = if let Some(prev_content) = prev_content {
json!({ "prev_content": prev_content })
} else {
json!({})
};
json!({
"type": content.event_type(),
"state_key": state_key,
"content": content,
"event_id": event_id!("$evt"),
"sender": sender,
"origin_server_ts": 10,
"unsigned": unsigned,
})
}
}