diff options
Diffstat (limited to 'matrix/pushrules/rule_test.go')
-rw-r--r-- | matrix/pushrules/rule_test.go | 166 |
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)) +} |