Skip to content

Commit 61258e8

Browse files
committed
test: Fix and add tests for computing the push conditions requiring the room creation event
1 parent e86aab6 commit 61258e8

File tree

2 files changed

+75
-2
lines changed

2 files changed

+75
-2
lines changed

crates/matrix-sdk-ui/tests/integration/notification_client.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use matrix_sdk_ui::{
2222
sync_service::SyncService,
2323
};
2424
use ruma::{
25-
event_id,
25+
RoomVersionId, event_id,
2626
events::{TimelineEventType, room::member::MembershipState},
2727
mxc_uri, room_id, user_id,
2828
};
@@ -128,6 +128,8 @@ async fn test_notification_client_sliding_sync() {
128128

129129
let event_factory = EventFactory::new().room(room_id);
130130

131+
let room_create_event = event_factory.create(sender, RoomVersionId::V1).into_raw_sync();
132+
131133
let sender_member_event = event_factory
132134
.member(sender)
133135
.display_name(sender_display_name)
@@ -173,6 +175,9 @@ async fn test_notification_client_sliding_sync() {
173175
"initial": true,
174176

175177
"required_state": [
178+
// The room creation event.
179+
room_create_event,
180+
176181
// Sender's member information.
177182
sender_member_event,
178183

@@ -230,6 +235,7 @@ async fn test_notification_client_sliding_sync() {
230235
["m.room.power_levels", ""],
231236
["m.room.join_rules", ""],
232237
["org.matrix.msc3401.call.member", "*"],
238+
["m.room.create", ""],
233239
],
234240
"filters": {
235241
"is_invite": true,
@@ -248,6 +254,7 @@ async fn test_notification_client_sliding_sync() {
248254
["m.room.power_levels", ""],
249255
["m.room.join_rules", ""],
250256
["org.matrix.msc3401.call.member", "*"],
257+
["m.room.create", ""],
251258
],
252259
"timeline_limit": 16,
253260
},

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

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4083,6 +4083,8 @@ pub struct RoomMemberWithSenderInfo {
40834083

40844084
#[cfg(all(test, not(target_family = "wasm")))]
40854085
mod tests {
4086+
use std::collections::BTreeMap;
4087+
40864088
use matrix_sdk_base::{store::ComposerDraftType, ComposerDraft};
40874089
use matrix_sdk_test::{
40884090
async_test, event_factory::EventFactory, test_json, JoinedRoomBuilder, StateTestEvent,
@@ -4091,7 +4093,7 @@ mod tests {
40914093
use ruma::{
40924094
event_id,
40934095
events::{relation::RelationType, room::member::MembershipState},
4094-
int, owned_event_id, room_id, user_id,
4096+
int, owned_event_id, room_id, user_id, RoomVersionId,
40954097
};
40964098
use wiremock::{
40974099
matchers::{header, method, path_regex},
@@ -4644,4 +4646,68 @@ mod tests {
46444646
assert!(result.next_batch_token.is_none());
46454647
assert!(result.recursion_depth.is_none());
46464648
}
4649+
4650+
#[async_test]
4651+
async fn test_power_levels_computation() {
4652+
let server = MatrixMockServer::new().await;
4653+
let client = server.client_builder().build().await;
4654+
4655+
let room_id = room_id!("!a:b.c");
4656+
let sender_id = client.user_id().expect("No session id");
4657+
let f = EventFactory::new().room(room_id).sender(sender_id);
4658+
let mut user_map = BTreeMap::from([(sender_id.into(), 50.into())]);
4659+
4660+
// Computing the power levels will need these 3 state events:
4661+
let room_create_event = f.create(sender_id, RoomVersionId::V1).state_key("").into_raw();
4662+
let power_levels_event = f.power_levels(&mut user_map).state_key("").into_raw();
4663+
let room_member_event = f.member(sender_id).into_raw();
4664+
4665+
// With only the room member event
4666+
let room = server
4667+
.sync_room(
4668+
&client,
4669+
JoinedRoomBuilder::new(room_id).add_state_bulk([room_member_event.clone()]),
4670+
)
4671+
.await;
4672+
let ctx = room
4673+
.push_condition_room_ctx()
4674+
.await
4675+
.expect("Failed to get push condition context")
4676+
.expect("Could not get push condition context");
4677+
4678+
// The internal power levels couldn't be computed
4679+
assert!(ctx.power_levels.is_none());
4680+
4681+
// Adding the room creation event
4682+
let room = server
4683+
.sync_room(
4684+
&client,
4685+
JoinedRoomBuilder::new(room_id).add_state_bulk([room_create_event.clone()]),
4686+
)
4687+
.await;
4688+
let ctx = room
4689+
.push_condition_room_ctx()
4690+
.await
4691+
.expect("Failed to get push condition context")
4692+
.expect("Could not get push condition context");
4693+
4694+
// The internal power levels still couldn't be computed
4695+
assert!(ctx.power_levels.is_none());
4696+
4697+
// With the room member, room creation and the power levels events
4698+
let room = server
4699+
.sync_room(
4700+
&client,
4701+
JoinedRoomBuilder::new(room_id).add_state_bulk([power_levels_event]),
4702+
)
4703+
.await;
4704+
let ctx = room
4705+
.push_condition_room_ctx()
4706+
.await
4707+
.expect("Failed to get push condition context")
4708+
.expect("Could not get push condition context");
4709+
4710+
// The internal power levels can finally be computed
4711+
assert!(ctx.power_levels.is_some());
4712+
}
46474713
}

0 commit comments

Comments
 (0)