aboutsummaryrefslogtreecommitdiff
path: root/internal/pushrules/default_pushrules_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pushrules/default_pushrules_test.go')
-rw-r--r--internal/pushrules/default_pushrules_test.go111
1 files changed, 111 insertions, 0 deletions
diff --git a/internal/pushrules/default_pushrules_test.go b/internal/pushrules/default_pushrules_test.go
new file mode 100644
index 00000000..dea82984
--- /dev/null
+++ b/internal/pushrules/default_pushrules_test.go
@@ -0,0 +1,111 @@
+package pushrules
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+// Tests that the pre-defined rules as of
+// https://spec.matrix.org/v1.4/client-server-api/#predefined-rules
+// are correct
+func TestDefaultRules(t *testing.T) {
+ type testCase struct {
+ name string
+ inputBytes []byte
+ want Rule
+ }
+
+ testCases := []testCase{
+ // Default override rules
+ {
+ name: ".m.rule.master",
+ inputBytes: []byte(`{"rule_id":".m.rule.master","default":true,"enabled":false,"actions":["dont_notify"]}`),
+ want: mRuleMasterDefinition,
+ },
+ {
+ name: ".m.rule.suppress_notices",
+ inputBytes: []byte(`{"rule_id":".m.rule.suppress_notices","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"content.msgtype","pattern":"m.notice"}],"actions":["dont_notify"]}`),
+ want: mRuleSuppressNoticesDefinition,
+ },
+ {
+ name: ".m.rule.invite_for_me",
+ inputBytes: []byte(`{"rule_id":".m.rule.invite_for_me","default":true,"enabled":true,"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":"@test:localhost"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
+ want: *mRuleInviteForMeDefinition("@test:localhost"),
+ },
+ {
+ name: ".m.rule.member_event",
+ inputBytes: []byte(`{"rule_id":".m.rule.member_event","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.member"}],"actions":["dont_notify"]}`),
+ want: mRuleMemberEventDefinition,
+ },
+ {
+ name: ".m.rule.contains_display_name",
+ inputBytes: []byte(`{"rule_id":".m.rule.contains_display_name","default":true,"enabled":true,"conditions":[{"kind":"contains_display_name"}],"actions":["notify",{"set_tweak":"sound","value":"default"},{"set_tweak":"highlight"}]}`),
+ want: mRuleContainsDisplayNameDefinition,
+ },
+ {
+ name: ".m.rule.tombstone",
+ inputBytes: []byte(`{"rule_id":".m.rule.tombstone","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"}]}`),
+ want: mRuleTombstoneDefinition,
+ },
+ {
+ name: ".m.rule.room.server_acl",
+ inputBytes: []byte(`{"rule_id":".m.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":[]}`),
+ want: mRuleACLsDefinition,
+ },
+ {
+ name: ".m.rule.roomnotif",
+ inputBytes: []byte(`{"rule_id":".m.rule.roomnotif","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"content.body","pattern":"@room"},{"kind":"sender_notification_permission","key":"room"}],"actions":["notify",{"set_tweak":"highlight"}]}`),
+ want: mRuleRoomNotifDefinition,
+ },
+ // Default content rules
+ {
+ name: ".m.rule.contains_user_name",
+ inputBytes: []byte(`{"rule_id":".m.rule.contains_user_name","default":true,"enabled":true,"actions":["notify",{"set_tweak":"sound","value":"default"},{"set_tweak":"highlight"}],"pattern":"myLocalUser"}`),
+ want: *mRuleContainsUserNameDefinition("myLocalUser"),
+ },
+ // default underride rules
+ {
+ name: ".m.rule.call",
+ inputBytes: []byte(`{"rule_id":".m.rule.call","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.call.invite"}],"actions":["notify",{"set_tweak":"sound","value":"ring"}]}`),
+ want: mRuleCallDefinition,
+ },
+ {
+ name: ".m.rule.encrypted_room_one_to_one",
+ inputBytes: []byte(`{"rule_id":".m.rule.encrypted_room_one_to_one","default":true,"enabled":true,"conditions":[{"kind":"room_member_count","is":"2"},{"kind":"event_match","key":"type","pattern":"m.room.encrypted"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
+ want: mRuleEncryptedRoomOneToOneDefinition,
+ },
+ {
+ name: ".m.rule.room_one_to_one",
+ inputBytes: []byte(`{"rule_id":".m.rule.room_one_to_one","default":true,"enabled":true,"conditions":[{"kind":"room_member_count","is":"2"},{"kind":"event_match","key":"type","pattern":"m.room.message"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
+ want: mRuleRoomOneToOneDefinition,
+ },
+ {
+ name: ".m.rule.message",
+ inputBytes: []byte(`{"rule_id":".m.rule.message","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.message"}],"actions":["notify"]}`),
+ want: mRuleMessageDefinition,
+ },
+ {
+ name: ".m.rule.encrypted",
+ inputBytes: []byte(`{"rule_id":".m.rule.encrypted","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.encrypted"}],"actions":["notify"]}`),
+ want: mRuleEncryptedDefinition,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ r := Rule{}
+ // unmarshal predefined push rules
+ err := json.Unmarshal(tc.inputBytes, &r)
+ assert.NoError(t, err)
+ assert.Equal(t, tc.want, r)
+
+ // and reverse it to check we get the expected result
+ got, err := json.Marshal(r)
+ assert.NoError(t, err)
+ assert.Equal(t, string(got), string(tc.inputBytes))
+ })
+
+ }
+}