aboutsummaryrefslogtreecommitdiff
path: root/matrix/pushrules/rule_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'matrix/pushrules/rule_test.go')
-rw-r--r--matrix/pushrules/rule_test.go166
1 files changed, 166 insertions, 0 deletions
diff --git a/matrix/pushrules/rule_test.go b/matrix/pushrules/rule_test.go
index e8b56f4..3d3f03c 100644
--- a/matrix/pushrules/rule_test.go
+++ b/matrix/pushrules/rule_test.go
@@ -15,3 +15,169 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package pushrules_test
+
+import (
+ "testing"
+ "github.com/stretchr/testify/assert"
+ "maunium.net/go/gomuks/matrix/pushrules"
+)
+
+func TestPushRule_Match_Conditions(t *testing.T) {
+ cond1 := newMatchPushCondition("content.msgtype", "m.emote")
+ cond2 := newMatchPushCondition("content.body", "*pushrules")
+ rule := &pushrules.PushRule{
+ Type: pushrules.OverrideRule,
+ Enabled: true,
+ Conditions: []*pushrules.PushCondition{cond1, cond2},
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "is testing pushrules",
+ })
+ assert.True(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Conditions_Disabled(t *testing.T) {
+ cond1 := newMatchPushCondition("content.msgtype", "m.emote")
+ cond2 := newMatchPushCondition("content.body", "*pushrules")
+ rule := &pushrules.PushRule{
+ Type: pushrules.OverrideRule,
+ Enabled: false,
+ Conditions: []*pushrules.PushCondition{cond1, cond2},
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "is testing pushrules",
+ })
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Conditions_FailIfOneFails(t *testing.T) {
+ cond1 := newMatchPushCondition("content.msgtype", "m.emote")
+ cond2 := newMatchPushCondition("content.body", "*pushrules")
+ rule := &pushrules.PushRule{
+ Type: pushrules.OverrideRule,
+ Enabled: true,
+ Conditions: []*pushrules.PushCondition{cond1, cond2},
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.text",
+ "body": "I'm testing pushrules",
+ })
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Content(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.ContentRule,
+ Enabled: true,
+ Pattern: "is testing*",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "is testing pushrules",
+ })
+ assert.True(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Content_Fail(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.ContentRule,
+ Enabled: true,
+ Pattern: "is testing*",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "is not testing pushrules",
+ })
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Content_ImplicitGlob(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.ContentRule,
+ Enabled: true,
+ Pattern: "testing",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "is not testing pushrules",
+ })
+ assert.True(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Content_IllegalGlob(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.ContentRule,
+ Enabled: true,
+ Pattern: "this is not a valid glo[b",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{
+ "msgtype": "m.emote",
+ "body": "this is not a valid glob",
+ })
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Room(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.RoomRule,
+ Enabled: true,
+ RuleID: "!fakeroom:maunium.net",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{})
+ assert.True(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Room_Fail(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.RoomRule,
+ Enabled: true,
+ RuleID: "!otherroom:maunium.net",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{})
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+
+func TestPushRule_Match_Sender(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.SenderRule,
+ Enabled: true,
+ RuleID: "@tulir:maunium.net",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{})
+ assert.True(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_Sender_Fail(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.RoomRule,
+ Enabled: true,
+ RuleID: "@someone:matrix.org",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{})
+ assert.False(t, rule.Match(blankTestRoom, event))
+}
+
+func TestPushRule_Match_UnknownTypeAlwaysFail(t *testing.T) {
+ rule := &pushrules.PushRule{
+ Type: pushrules.PushRuleType("foobar"),
+ Enabled: true,
+ RuleID: "@someone:matrix.org",
+ }
+
+ event := newFakeEvent("m.room.message", map[string]interface{}{})
+ assert.False(t, rule.Match(blankTestRoom, event))
+}