diff --git a/src/models/notificationsettings/toNotificationSettings.ts b/src/models/notificationsettings/toNotificationSettings.ts index 9a3f15453d2..0515f275b67 100644 --- a/src/models/notificationsettings/toNotificationSettings.ts +++ b/src/models/notificationsettings/toNotificationSettings.ts @@ -86,6 +86,7 @@ export function toNotificationSettings( supportsIntentionalMentions && standardRules.get(RuleId.IsUserMention), standardRules.get(RuleId.ContainsUserName), standardRules.get(RuleId.ContainsDisplayName), + ...contentRules, ]), people: determineSound(dmRules), }, diff --git a/test/models/notificationsettings/NotificationSettings-test.ts b/test/models/notificationsettings/NotificationSettings-test.ts index 765525838cf..05e18727038 100644 --- a/test/models/notificationsettings/NotificationSettings-test.ts +++ b/test/models/notificationsettings/NotificationSettings-test.ts @@ -190,4 +190,37 @@ describe("NotificationSettings", () => { expect(pendingChanges.deleted).toHaveLength(0); expect(pendingChanges.updated).toHaveLength(0); }); + + it("correctly handles audible keywords without mentions settings", async () => { + const pushRules = (await import("./pushrules_bug_keyword_only.json")) as IPushRules; + const model = toNotificationSettings(pushRules, false); + const pendingChanges = reconcileNotificationSettings(pushRules, model, false); + const expectedModel: NotificationSettings = { + globalMute: false, + defaultLevels: { + dm: RoomNotifState.MentionsOnly, + room: RoomNotifState.MentionsOnly, + }, + sound: { + calls: "ring", + mentions: "default", + people: undefined, + }, + activity: { + bot_notices: true, + invite: true, + status_event: false, + }, + mentions: { + user: false, + room: true, + keywords: true, + }, + keywords: ["janne"], + }; + expect(model).toEqual(expectedModel); + expect(pendingChanges.added).toHaveLength(0); + expect(pendingChanges.deleted).toHaveLength(0); + expect(pendingChanges.updated).toHaveLength(0); + }); }); diff --git a/test/models/notificationsettings/pushrules_bug_keyword_only.json b/test/models/notificationsettings/pushrules_bug_keyword_only.json new file mode 100644 index 00000000000..172957e53dd --- /dev/null +++ b/test/models/notificationsettings/pushrules_bug_keyword_only.json @@ -0,0 +1,377 @@ +{ + "global": { + "underride": [ + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.call.invite" + } + ], + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "ring" + }, + { + "set_tweak": "highlight", + "value": false + } + ], + "rule_id": ".m.rule.call", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.message" + }, + { + "kind": "room_member_count", + "is": "2" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.room_one_to_one", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.encrypted" + }, + { + "kind": "room_member_count", + "is": "2" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.encrypted_room_one_to_one", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.message" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.message", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.encrypted" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.encrypted", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "im.vector.modular.widgets" + }, + { + "kind": "event_match", + "key": "content.type", + "pattern": "jitsi" + }, + { + "kind": "event_match", + "key": "state_key", + "pattern": "*" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight", + "value": false + } + ], + "rule_id": ".im.vector.jitsi", + "default": true, + "enabled": true + }, + { + "rule_id": ".org.matrix.msc3914.rule.room.call", + "default": true, + "enabled": true, + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "org.matrix.msc3401.call" + }, + { + "kind": "call_started" + } + ], + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + } + ] + } + ], + "sender": [], + "room": [], + "content": [ + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + }, + { + "set_tweak": "highlight" + } + ], + "pattern": "janne", + "rule_id": "janne", + "default": false, + "enabled": true + }, + { + "actions": ["dont_notify"], + "rule_id": ".m.rule.contains_user_name", + "default": true, + "pattern": "jannemk", + "enabled": true + } + ], + "override": [ + { + "conditions": [], + "actions": ["dont_notify"], + "rule_id": ".m.rule.master", + "default": true, + "enabled": false + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "content.msgtype", + "pattern": "m.notice" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.suppress_notices", + "default": true, + "enabled": false + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.member" + }, + { + "kind": "event_match", + "key": "content.membership", + "pattern": "invite" + }, + { + "kind": "event_match", + "key": "state_key", + "pattern": "@jannemk:element.io" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight", + "value": false + } + ], + "rule_id": ".m.rule.invite_for_me", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.member" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.member_event", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "contains_display_name" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.contains_display_name", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "sender_notification_permission", + "key": "room" + }, + { + "kind": "event_match", + "key": "content.body", + "pattern": "@room" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight", + "value": false + } + ], + "rule_id": ".m.rule.roomnotif", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.tombstone" + }, + { + "kind": "event_match", + "key": "state_key", + "pattern": "" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight" + } + ], + "rule_id": ".m.rule.tombstone", + "default": true, + "enabled": false + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.reaction" + } + ], + "actions": ["dont_notify"], + "rule_id": ".m.rule.reaction", + "default": true, + "enabled": true + }, + { + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.server_acl" + }, + { + "kind": "event_match", + "key": "state_key", + "pattern": "" + } + ], + "actions": [], + "rule_id": ".m.rule.room.server_acl", + "default": true, + "enabled": true + }, + { + "rule_id": ".org.matrix.msc3952.is_user_mention", + "default": true, + "enabled": false, + "conditions": [ + { + "kind": "event_property_contains", + "key": "content.org\\.matrix\\.msc3952\\.mentions.user_ids", + "value": "@jannemk:element.io" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight" + } + ] + }, + { + "rule_id": ".org.matrix.msc3952.is_room_mention", + "default": true, + "enabled": true, + "conditions": [ + { + "kind": "event_property_is", + "key": "content.org\\.matrix\\.msc3952\\.mentions.room", + "value": true + }, + { + "kind": "sender_notification_permission", + "key": "room" + } + ], + "actions": [ + "notify", + { + "set_tweak": "highlight" + } + ] + }, + { + "rule_id": ".org.matrix.msc3786.rule.room.server_acl", + "default": true, + "enabled": true, + "conditions": [ + { + "kind": "event_match", + "key": "type", + "pattern": "m.room.server_acl" + }, + { + "kind": "event_match", + "key": "state_key", + "pattern": "" + } + ], + "actions": [] + } + ] + } +}