|
12 | 12 | // See the License for the specific language governing permissions and |
13 | 13 | // limitations under the License. |
14 | 14 |
|
15 | | -use std::{iter::once, ops::Not}; |
| 15 | +use std::{ |
| 16 | + iter::once, |
| 17 | + ops::{Deref, Not}, |
| 18 | +}; |
16 | 19 |
|
17 | 20 | use eyeball::{AsyncLock, SharedObservable, Subscriber}; |
18 | 21 | pub use matrix_sdk_base::latest_event::{ |
@@ -1015,8 +1018,16 @@ fn filter_any_sync_state_event( |
1015 | 1018 | } |
1016 | 1019 |
|
1017 | 1020 | MembershipState::Invite => { |
1018 | | - // We can only decide whether the user is invited if the event isn't redacted. |
1019 | | - matches!(member, SyncStateEvent::Original(_)) |
| 1021 | + // The current _is_ invited (not someone else). |
| 1022 | + match member { |
| 1023 | + // We can only decide whether the user is invited if the event isn't |
| 1024 | + // redacted. |
| 1025 | + SyncStateEvent::Original(state) => { |
| 1026 | + Some(state.state_key.deref()) == own_user_id |
| 1027 | + } |
| 1028 | + |
| 1029 | + _ => false, |
| 1030 | + } |
1020 | 1031 | } |
1021 | 1032 |
|
1022 | 1033 | _ => false, |
@@ -1279,38 +1290,55 @@ mod tests_latest_event_content { |
1279 | 1290 | } |
1280 | 1291 |
|
1281 | 1292 | #[test] |
1282 | | - fn test_room_message_verification_request() { |
1283 | | - use ruma::{OwnedDeviceId, events::room::message}; |
| 1293 | + fn test_invite_state_event() { |
| 1294 | + use ruma::events::room::member::MembershipState; |
1284 | 1295 |
|
| 1296 | + // The current user is receiving an invite. |
1285 | 1297 | assert_latest_event_content!( |
1286 | 1298 | event | event_factory | { |
1287 | 1299 | event_factory |
1288 | | - .event(RoomMessageEventContent::new(message::MessageType::VerificationRequest( |
1289 | | - message::KeyVerificationRequestEventContent::new( |
1290 | | - "body".to_owned(), |
1291 | | - vec![], |
1292 | | - OwnedDeviceId::from("device_id"), |
1293 | | - user_id!("@user:server.name").to_owned(), |
1294 | | - ), |
1295 | | - ))) |
| 1300 | + .member(user_id!("@mnt_io:matrix.org")) |
| 1301 | + .membership(MembershipState::Invite) |
1296 | 1302 | .into_event() |
1297 | 1303 | } |
1298 | | - is not a candidate |
| 1304 | + is a candidate |
1299 | 1305 | ); |
1300 | 1306 | } |
1301 | 1307 |
|
1302 | 1308 | #[test] |
1303 | | - fn test_invite() { |
| 1309 | + fn test_invite_state_event_for_someone_else() { |
1304 | 1310 | use ruma::events::room::member::MembershipState; |
1305 | 1311 |
|
| 1312 | + // The current user sees an invite but for someone else. |
1306 | 1313 | assert_latest_event_content!( |
1307 | 1314 | event | event_factory | { |
1308 | 1315 | event_factory |
1309 | | - .member(user_id!("@mnt_io:matrix.org")) |
| 1316 | + .member(user_id!("@other_mnt_io:server.name")) |
1310 | 1317 | .membership(MembershipState::Invite) |
1311 | 1318 | .into_event() |
1312 | 1319 | } |
1313 | | - is a candidate |
| 1320 | + is not a candidate |
| 1321 | + ); |
| 1322 | + } |
| 1323 | + |
| 1324 | + #[test] |
| 1325 | + fn test_room_message_verification_request() { |
| 1326 | + use ruma::{OwnedDeviceId, events::room::message}; |
| 1327 | + |
| 1328 | + assert_latest_event_content!( |
| 1329 | + event | event_factory | { |
| 1330 | + event_factory |
| 1331 | + .event(RoomMessageEventContent::new(message::MessageType::VerificationRequest( |
| 1332 | + message::KeyVerificationRequestEventContent::new( |
| 1333 | + "body".to_owned(), |
| 1334 | + vec![], |
| 1335 | + OwnedDeviceId::from("device_id"), |
| 1336 | + user_id!("@user:server.name").to_owned(), |
| 1337 | + ), |
| 1338 | + ))) |
| 1339 | + .into_event() |
| 1340 | + } |
| 1341 | + is not a candidate |
1314 | 1342 | ); |
1315 | 1343 | } |
1316 | 1344 | } |
|
0 commit comments