@@ -657,37 +657,103 @@ def test_delayed_message(self) -> None:
657657 # user2 should not be notified about it, because they can't see it.
658658 self .assertEqual (self .get_notif_count (self .user_id2 ), 0 )
659659
660+
660661class PushRuleEvaluatorBaseRulesTestCase (unittest .TestCase ):
661- def test_supress_auto_accept_invite (self ) -> None :
662- event = FrozenEvent (
662+ def test_reactions (self ) -> None :
663+ message_event = FrozenEvent (
663664 {
664665 "event_id" : "$event_id" ,
665- "room_id" :"!wFyjEwanOaElpGOaLW:beeper.com" ,
666- "content" :{
667- "displayname" :"Brad Murray" ,
668- "fi.mau.will_auto_accept" : True ,
669- "is_direct" : True ,
670- "membership" :"invite"
666+ "room_id" : "!room_id:beeper.com" ,
667+ "content" : {
668+ "body" : "Looks like Nick is way ahead of me on this one" ,
669+ "msgtype" : "m.text" ,
671670 },
672- "sender" :"@_brad_imessagecloud_83372:beeper.com" ,
673- "state_key" :"@brad:beeper.com" ,
674- "type" :"m.room.member" ,
671+ "sender" : "@brad:beeper.com" ,
672+ "type" : "m.room.message" ,
675673 },
676674 RoomVersions .V1 ,
677675 )
678- room_member_count = 0
679- sender_power_level = 0
680- power_levels : Dict [str , Union [int , Dict [str , int ]]] = {}
681676
682- evaluator = PushRuleEvaluator (
683- _flatten_dict (event ),
684- room_member_count ,
685- sender_power_level ,
686- power_levels .get ("notifications" , {}),
677+ reaction_event = FrozenEvent (
678+ {
679+ "event_id" : "$reaction_id" ,
680+ "room_id" : "!room_id:beeper.com" ,
681+ "content" : {
682+ "m.relates_to" : {
683+ "event_id" : "$event_id" ,
684+ "key" : "\U0001F44D " ,
685+ "rel_type" : "m.annotation" ,
686+ }
687+ },
688+ "sender" : "@nick:beeper.com" ,
689+ "type" : "m.reaction" ,
690+ },
691+ RoomVersions .V1 ,
692+ )
693+
694+ dm_evaluator = PushRuleEvaluator (
695+ _flatten_dict (reaction_event ),
696+ 2 ,
697+ 0 ,
698+ {},
699+ {"m.annotation" : _flatten_dict (message_event )},
700+ True ,
701+ )
702+
703+ # Reaction to Brad's message, should be an action for Brad
704+ actions = dm_evaluator .run (
705+ FilteredPushRules (PushRules ([]), {}, True ), "@brad:beeper.com" , "Brad"
706+ )
707+ self .assertTrue ("notify" in actions )
708+
709+ # Reaction to Brad's message, should not be an action for Nick
710+ actions = dm_evaluator .run (
711+ FilteredPushRules (PushRules ([]), {}, True ), "@nick:beeper.com" , "Nick"
712+ )
713+ self .assertEqual (actions , [])
714+
715+ large_room_evaluator = PushRuleEvaluator (
716+ _flatten_dict (reaction_event ),
717+ 30 ,
718+ 0 ,
687719 {},
720+ {"m.annotation" : _flatten_dict (message_event )},
688721 True ,
689722 )
690723
691- actions = evaluator .run (FilteredPushRules (PushRules ([]), {}, True ), "@brad:beeper.com" , "Brad Murray" )
724+ # Large rooms should never have emoji reaction notifications
725+ actions = large_room_evaluator .run (
726+ FilteredPushRules (PushRules ([]), {}, True ), "@brad:beeper.com" , "Brad"
727+ )
692728 self .assertEqual (actions , [])
729+ actions = large_room_evaluator .run (
730+ FilteredPushRules (PushRules ([]), {}, True ), "@nick:beeper.com" , "Nick"
731+ )
732+ self .assertEqual (actions , [])
733+
734+ def test_supress_auto_accept_invite (self ) -> None :
735+ event = FrozenEvent (
736+ {
737+ "event_id" : "$event_id" ,
738+ "room_id" : "!wFyjEwanOaElpGOaLW:beeper.com" ,
739+ "content" : {
740+ "displayname" : "Brad Murray" ,
741+ "fi.mau.will_auto_accept" : True ,
742+ "is_direct" : True ,
743+ "membership" : "invite" ,
744+ },
745+ "sender" : "@_brad_imessagecloud_83372:beeper.com" ,
746+ "state_key" : "@brad:beeper.com" ,
747+ "type" : "m.room.member" ,
748+ },
749+ RoomVersions .V1 ,
750+ )
751+
752+ evaluator = PushRuleEvaluator (_flatten_dict (event ), 0 , 0 , {}, {}, True )
693753
754+ actions = evaluator .run (
755+ FilteredPushRules (PushRules ([]), {}, True ),
756+ "@brad:beeper.com" ,
757+ "Brad Murray" ,
758+ )
759+ self .assertEqual (actions , [])
0 commit comments