@@ -14,8 +14,8 @@ use matrix_sdk_test::{
14
14
async_test,
15
15
mocks:: { mock_encryption_state, mock_redaction} ,
16
16
test_json:: { self , sync:: CUSTOM_ROOM_POWER_LEVELS } ,
17
- EphemeralTestEvent , GlobalAccountDataTestEvent , JoinedRoomBuilder , SyncResponseBuilder ,
18
- DEFAULT_TEST_ROOM_ID ,
17
+ EphemeralTestEvent , GlobalAccountDataTestEvent , JoinedRoomBuilder , StateTestEvent ,
18
+ SyncResponseBuilder , DEFAULT_TEST_ROOM_ID ,
19
19
} ;
20
20
use ruma:: {
21
21
api:: client:: { membership:: Invite3pidInit , receipt:: create_receipt:: v3:: ReceiptType } ,
@@ -635,7 +635,8 @@ async fn test_call_notifications_ring_for_dms() {
635
635
let ( client, server) = logged_in_client_with_server ( ) . await ;
636
636
637
637
let mut sync_builder = SyncResponseBuilder :: new ( ) ;
638
- sync_builder. add_joined_room ( JoinedRoomBuilder :: default ( ) ) ;
638
+ let room_builder = JoinedRoomBuilder :: default ( ) . add_state_event ( StateTestEvent :: PowerLevels ) ;
639
+ sync_builder. add_joined_room ( room_builder) ;
639
640
sync_builder. add_global_account_data_event ( GlobalAccountDataTestEvent :: Direct ) ;
640
641
641
642
mock_sync ( & server, sync_builder. build_json_sync_response ( ) , None ) . await ;
@@ -678,9 +679,10 @@ async fn test_call_notifications_notify_for_rooms() {
678
679
let ( client, server) = logged_in_client_with_server ( ) . await ;
679
680
680
681
let mut sync_builder = SyncResponseBuilder :: new ( ) ;
681
- sync_builder . add_joined_room ( JoinedRoomBuilder :: default ( ) ) ;
682
-
682
+ let room_builder = JoinedRoomBuilder :: default ( ) . add_state_event ( StateTestEvent :: PowerLevels ) ;
683
+ sync_builder . add_joined_room ( room_builder ) ;
683
684
mock_sync ( & server, sync_builder. build_json_sync_response ( ) , None ) . await ;
685
+
684
686
mock_encryption_state ( & server, false ) . await ;
685
687
686
688
let sync_settings = SyncSettings :: new ( ) . timeout ( Duration :: from_millis ( 3000 ) ) ;
@@ -715,6 +717,41 @@ async fn test_call_notifications_notify_for_rooms() {
715
717
room. send_call_notification_if_needed ( ) . await . unwrap ( ) ;
716
718
}
717
719
720
+ #[ async_test]
721
+ async fn test_call_notifications_dont_notify_room_without_mention_powerlevel ( ) {
722
+ let ( client, server) = logged_in_client_with_server ( ) . await ;
723
+
724
+ let mut sync_builder = SyncResponseBuilder :: new ( ) ;
725
+ let mut power_level_event = StateTestEvent :: PowerLevels . into_json_value ( ) ;
726
+ // Allow noone to send room notify events.
727
+ * power_level_event. get_mut ( "content" ) . unwrap ( ) . get_mut ( "notifications" ) . unwrap ( ) =
728
+ json ! ( { "room" : 101 } ) ;
729
+
730
+ sync_builder. add_joined_room (
731
+ JoinedRoomBuilder :: default ( ) . add_state_event ( StateTestEvent :: Custom ( power_level_event) ) ,
732
+ ) ;
733
+
734
+ mock_sync ( & server, sync_builder. build_json_sync_response ( ) , None ) . await ;
735
+ mock_encryption_state ( & server, false ) . await ;
736
+
737
+ let sync_settings = SyncSettings :: new ( ) . timeout ( Duration :: from_millis ( 3000 ) ) ;
738
+ let _response = client. sync_once ( sync_settings) . await . unwrap ( ) ;
739
+
740
+ let room = client. get_room ( & DEFAULT_TEST_ROOM_ID ) . unwrap ( ) ;
741
+ assert ! ( !room. is_direct( ) . await . unwrap( ) ) ;
742
+ assert ! ( !room. has_active_room_call( ) ) ;
743
+
744
+ Mock :: given ( method ( "PUT" ) )
745
+ . and ( path_regex ( r"^/_matrix/client/r0/rooms/.*/send/.*" ) )
746
+ . respond_with ( ResponseTemplate :: new ( 200 ) . set_body_json ( json ! ( { "event_id" : "$event_id" } ) ) )
747
+ // Expect no calls of the send because we dont have permission to notify.
748
+ . expect ( 0 )
749
+ . mount ( & server)
750
+ . await ;
751
+
752
+ room. send_call_notification_if_needed ( ) . await . unwrap ( ) ;
753
+ }
754
+
718
755
#[ async_test]
719
756
async fn test_make_reply_event_doesnt_require_event_cache ( ) {
720
757
// Even if we don't have enabled the event cache, we'll resort to using the
0 commit comments