@@ -578,6 +578,79 @@ describe("NotificationService", function () {
578
578
} ) ;
579
579
} ) ;
580
580
581
+ describe ( "Test event property contains" , ( ) => {
582
+ it . each ( [
583
+ // Simple string matching.
584
+ { value : "bar" , eventValue : [ "bar" ] , expected : true } ,
585
+ // Matches are case-sensitive.
586
+ { value : "bar" , eventValue : [ "BAR" ] , expected : false } ,
587
+ // Values should not be type-coerced.
588
+ { value : "bar" , eventValue : [ true ] , expected : false } ,
589
+ { value : "bar" , eventValue : [ 1 ] , expected : false } ,
590
+ { value : "bar" , eventValue : [ false ] , expected : false } ,
591
+ // Boolean matching.
592
+ { value : true , eventValue : [ true ] , expected : true } ,
593
+ { value : false , eventValue : [ false ] , expected : true } ,
594
+ // Types should not be coerced.
595
+ { value : true , eventValue : [ "true" ] , expected : false } ,
596
+ { value : true , eventValue : [ 1 ] , expected : false } ,
597
+ { value : false , eventValue : [ null ] , expected : false } ,
598
+ // Null matching.
599
+ { value : null , eventValue : [ null ] , expected : true } ,
600
+ // Types should not be coerced
601
+ { value : null , eventValue : [ false ] , expected : false } ,
602
+ { value : null , eventValue : [ 0 ] , expected : false } ,
603
+ { value : null , eventValue : [ "" ] , expected : false } ,
604
+ { value : null , eventValue : [ undefined ] , expected : false } ,
605
+ // Non-array or empty values should never be matched.
606
+ { value : "bar" , eventValue : "bar" , expected : false } ,
607
+ { value : "bar" , eventValue : { bar : true } , expected : false } ,
608
+ { value : true , eventValue : { true : true } , expected : false } ,
609
+ { value : true , eventValue : true , expected : false } ,
610
+ { value : null , eventValue : [ ] , expected : false } ,
611
+ { value : null , eventValue : { } , expected : false } ,
612
+ { value : null , eventValue : null , expected : false } ,
613
+ { value : null , eventValue : undefined , expected : false } ,
614
+ ] ) ( "test $value against $eventValue" , ( { value, eventValue, expected } ) => {
615
+ matrixClient . pushRules ! = {
616
+ global : {
617
+ override : [
618
+ {
619
+ actions : [ PushRuleActionName . Notify ] ,
620
+ conditions : [
621
+ {
622
+ kind : ConditionKind . EventPropertyContainsPrefix ,
623
+ key : "content.foo" ,
624
+ value : value ,
625
+ } ,
626
+ ] ,
627
+ default : true ,
628
+ enabled : true ,
629
+ rule_id : ".m.rule.test" ,
630
+ } ,
631
+ ] ,
632
+ } ,
633
+ } ;
634
+
635
+ testEvent = utils . mkEvent ( {
636
+ type : "m.room.message" ,
637
+ room : testRoomId ,
638
+ user : "@alfred:localhost" ,
639
+ event : true ,
640
+ content : {
641
+ foo : eventValue ,
642
+ } ,
643
+ } ) ;
644
+
645
+ const actions = pushProcessor . actionsForEvent ( testEvent ) ;
646
+ if ( expected ) {
647
+ expect ( actions ?. notify ) . toBeTruthy ( ) ;
648
+ } else {
649
+ expect ( actions ?. notify ) . toBeFalsy ( ) ;
650
+ }
651
+ } ) ;
652
+ } ) ;
653
+
581
654
it . each ( [
582
655
// The properly escaped key works.
583
656
{ key : "content.m\\.test.foo" , pattern : "bar" , expected : true } ,
0 commit comments