diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-04-10 20:50:37 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-04-10 20:51:30 +0300 |
commit | 10ffa6189f89dd1758f034eaeadd1042c970f1b8 (patch) | |
tree | 268c8e4499f2efdda9a05d3dabe77939cc1c8691 | |
parent | 2ba2fde3966211845b1117c85b27e3c947b6307f (diff) |
Add a simple push rule parsing test
-rw-r--r-- | matrix/pushrules/pushrules_test.go | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/matrix/pushrules/pushrules_test.go b/matrix/pushrules/pushrules_test.go new file mode 100644 index 0000000..7e0e72e --- /dev/null +++ b/matrix/pushrules/pushrules_test.go @@ -0,0 +1,253 @@ +// gomuks - A terminal Matrix client written in Go. +// Copyright (C) 2018 Tulir Asokan +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package pushrules + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "maunium.net/go/gomatrix" +) + +var mapExamplePushRules map[string]interface{} + +func init() { + mapExamplePushRules = make(map[string]interface{}) + json.Unmarshal([]byte(JSONExamplePushRules), &mapExamplePushRules) +} + +func TestEventToPushRules(t *testing.T) { + event := &gomatrix.Event{ + Type: "m.push_rules", + Timestamp: 1523380910, + Content: mapExamplePushRules, + } + pushRuleset, err := EventToPushRules(event) + assert.Nil(t, err) + assert.NotNil(t, pushRuleset) + + assert.IsType(t, pushRuleset.Override, PushRuleArray{}) + assert.IsType(t, pushRuleset.Content, PushRuleArray{}) + assert.IsType(t, pushRuleset.Room, PushRuleMap{}) + assert.IsType(t, pushRuleset.Sender, PushRuleMap{}) + assert.IsType(t, pushRuleset.Underride, PushRuleArray{}) + assert.Len(t, pushRuleset.Override, 2) + assert.Len(t, pushRuleset.Content, 1) + assert.Empty(t, pushRuleset.Room.Map) + assert.Empty(t, pushRuleset.Sender.Map) + assert.Len(t, pushRuleset.Underride, 6) + + assert.Len(t, pushRuleset.Content[0].Actions, 3) + assert.True(t, pushRuleset.Content[0].Default) + assert.True(t, pushRuleset.Content[0].Enabled) + assert.Empty(t, pushRuleset.Content[0].Conditions) + assert.Equal(t, "alice", pushRuleset.Content[0].Pattern) + assert.Equal(t, ".m.rule.contains_user_name", pushRuleset.Content[0].RuleID) + + assert.False(t, pushRuleset.Override[0].Actions.Should().Notify) + assert.True(t, pushRuleset.Override[0].Actions.Should().NotifySpecified) +} + +const JSONExamplePushRules = `{ + "global": { + "content": [ + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + }, + { + "set_tweak": "highlight" + } + ], + "default": true, + "enabled": true, + "pattern": "alice", + "rule_id": ".m.rule.contains_user_name" + } + ], + "override": [ + { + "actions": [ + "dont_notify" + ], + "conditions": [], + "default": true, + "enabled": false, + "rule_id": ".m.rule.master" + }, + { + "actions": [ + "dont_notify" + ], + "conditions": [ + { + "key": "content.msgtype", + "kind": "event_match", + "pattern": "m.notice" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.suppress_notices" + } + ], + "room": [], + "sender": [], + "underride": [ + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "ring" + }, + { + "set_tweak": "highlight", + "value": false + } + ], + "conditions": [ + { + "key": "type", + "kind": "event_match", + "pattern": "m.call.invite" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.call" + }, + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + }, + { + "set_tweak": "highlight" + } + ], + "conditions": [ + { + "kind": "contains_display_name" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.contains_display_name" + }, + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + }, + { + "set_tweak": "highlight", + "value": false + } + ], + "conditions": [ + { + "is": "2", + "kind": "room_member_count" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.room_one_to_one" + }, + { + "actions": [ + "notify", + { + "set_tweak": "sound", + "value": "default" + }, + { + "set_tweak": "highlight", + "value": false + } + ], + "conditions": [ + { + "key": "type", + "kind": "event_match", + "pattern": "m.room.member" + }, + { + "key": "content.membership", + "kind": "event_match", + "pattern": "invite" + }, + { + "key": "state_key", + "kind": "event_match", + "pattern": "@alice:example.com" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.invite_for_me" + }, + { + "actions": [ + "notify", + { + "set_tweak": "highlight", + "value": false + } + ], + "conditions": [ + { + "key": "type", + "kind": "event_match", + "pattern": "m.room.member" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.member_event" + }, + { + "actions": [ + "notify", + { + "set_tweak": "highlight", + "value": false + } + ], + "conditions": [ + { + "key": "type", + "kind": "event_match", + "pattern": "m.room.message" + } + ], + "default": true, + "enabled": true, + "rule_id": ".m.rule.message" + } + ] + } +}` |