Skip to content

Commit b077f45

Browse files
jmartinespHywan
authored andcommitted
test(room_preview): Add tests for where get_room_preview gets its data from for each room state
1 parent 648d527 commit b077f45

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed

crates/matrix-sdk/src/client/mod.rs

+110
Original file line numberDiff line numberDiff line change
@@ -3186,4 +3186,114 @@ pub(crate) mod tests {
31863186
.await;
31873187
assert_matches!(ret, Ok(()));
31883188
}
3189+
3190+
#[async_test]
3191+
async fn test_room_preview_for_invited_room_hits_summary_endpoint() {
3192+
let server = MatrixMockServer::new().await;
3193+
let client = server.client_builder().build().await;
3194+
3195+
let room_id = room_id!("!a-room:matrix.org");
3196+
3197+
// Make sure the summary endpoint is called once
3198+
server.mock_room_summary().ok(room_id).mock_once().mount().await;
3199+
3200+
// We create a locally cached invited room
3201+
let invited_room = client.inner.base_client.get_or_create_room(room_id, RoomState::Invited);
3202+
3203+
// And we get a preview, the server endpoint was reached
3204+
let preview = client
3205+
.get_room_preview(room_id.into(), Vec::new())
3206+
.await
3207+
.expect("Room preview should be retrieved");
3208+
3209+
assert_eq!(invited_room.room_id().to_owned(), preview.room_id);
3210+
}
3211+
3212+
#[async_test]
3213+
async fn test_room_preview_for_left_room_hits_summary_endpoint() {
3214+
let server = MatrixMockServer::new().await;
3215+
let client = server.client_builder().build().await;
3216+
3217+
let room_id = room_id!("!a-room:matrix.org");
3218+
3219+
// Make sure the summary endpoint is called once
3220+
server.mock_room_summary().ok(room_id).mock_once().mount().await;
3221+
3222+
// We create a locally cached left room
3223+
let left_room = client.inner.base_client.get_or_create_room(room_id, RoomState::Left);
3224+
3225+
// And we get a preview, the server endpoint was reached
3226+
let preview = client
3227+
.get_room_preview(room_id.into(), Vec::new())
3228+
.await
3229+
.expect("Room preview should be retrieved");
3230+
3231+
assert_eq!(left_room.room_id().to_owned(), preview.room_id);
3232+
}
3233+
3234+
#[async_test]
3235+
async fn test_room_preview_for_knocked_room_hits_summary_endpoint() {
3236+
let server = MatrixMockServer::new().await;
3237+
let client = server.client_builder().build().await;
3238+
3239+
let room_id = room_id!("!a-room:matrix.org");
3240+
3241+
// Make sure the summary endpoint is called once
3242+
server.mock_room_summary().ok(room_id).mock_once().mount().await;
3243+
3244+
// We create a locally cached knocked room
3245+
let knocked_room = client.inner.base_client.get_or_create_room(room_id, RoomState::Knocked);
3246+
3247+
// And we get a preview, the server endpoint was reached
3248+
let preview = client
3249+
.get_room_preview(room_id.into(), Vec::new())
3250+
.await
3251+
.expect("Room preview should be retrieved");
3252+
3253+
assert_eq!(knocked_room.room_id().to_owned(), preview.room_id);
3254+
}
3255+
3256+
#[async_test]
3257+
async fn test_room_preview_for_joined_room_retrieves_local_room_info() {
3258+
let server = MatrixMockServer::new().await;
3259+
let client = server.client_builder().build().await;
3260+
3261+
let room_id = room_id!("!a-room:matrix.org");
3262+
3263+
// Make sure the summary endpoint is not called
3264+
server.mock_room_summary().ok(room_id).never().mount().await;
3265+
3266+
// We create a locally cached joined room
3267+
let joined_room = client.inner.base_client.get_or_create_room(room_id, RoomState::Joined);
3268+
3269+
// And we get a preview, no server endpoint was reached
3270+
let preview = client
3271+
.get_room_preview(room_id.into(), Vec::new())
3272+
.await
3273+
.expect("Room preview should be retrieved");
3274+
3275+
assert_eq!(joined_room.room_id().to_owned(), preview.room_id);
3276+
}
3277+
3278+
#[async_test]
3279+
async fn test_room_preview_for_banned_room_retrieves_local_room_info() {
3280+
let server = MatrixMockServer::new().await;
3281+
let client = server.client_builder().build().await;
3282+
3283+
let room_id = room_id!("!a-room:matrix.org");
3284+
3285+
// Make sure the summary endpoint is not called
3286+
server.mock_room_summary().ok(room_id).never().mount().await;
3287+
3288+
// We create a locally cached banned room
3289+
let banned_room = client.inner.base_client.get_or_create_room(room_id, RoomState::Banned);
3290+
3291+
// And we get a preview, no server endpoint was reached
3292+
let preview = client
3293+
.get_room_preview(room_id.into(), Vec::new())
3294+
.await
3295+
.expect("Room preview should be retrieved");
3296+
3297+
assert_eq!(banned_room.room_id().to_owned(), preview.room_id);
3298+
}
31893299
}

crates/matrix-sdk/src/test_utils/mocks.rs

+25
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,13 @@ impl MatrixMockServer {
924924
let mock = Mock::given(method("GET")).and(path_regex(r"^/_matrix/client/versions"));
925925
MockEndpoint { mock, server: &self.server, endpoint: VersionsEndpoint }
926926
}
927+
928+
/// Creates a prebuilt mock for the room summary endpoint [MSC3266](https://github.com/matrix-org/matrix-spec-proposals/pull/3266).
929+
pub fn mock_room_summary(&self) -> MockEndpoint<'_, RoomSummaryEndpoint> {
930+
let mock = Mock::given(method("GET"))
931+
.and(path_regex(r"^/_matrix/client/unstable/im.nheko.summary/rooms/.*/summary"));
932+
MockEndpoint { mock, server: &self.server, endpoint: RoomSummaryEndpoint }
933+
}
927934
}
928935

929936
/// Parameter to [`MatrixMockServer::sync_room`].
@@ -2286,3 +2293,21 @@ impl<'a> MockEndpoint<'a, VersionsEndpoint> {
22862293
MatrixMock { server: self.server, mock }
22872294
}
22882295
}
2296+
2297+
/// A prebuilt mock for the room summary endpoint.
2298+
pub struct RoomSummaryEndpoint;
2299+
2300+
impl<'a> MockEndpoint<'a, RoomSummaryEndpoint> {
2301+
/// Returns a successful response with some default data for the given room
2302+
/// id.
2303+
pub fn ok(self, room_id: &RoomId) -> MatrixMock<'a> {
2304+
let mock = self.mock.respond_with(ResponseTemplate::new(200).set_body_json(json!({
2305+
"room_id": room_id,
2306+
"guest_can_join": true,
2307+
"num_joined_members": 1,
2308+
"world_readable": true,
2309+
"join_rule": "public",
2310+
})));
2311+
MatrixMock { server: self.server, mock }
2312+
}
2313+
}

0 commit comments

Comments
 (0)