Fix pushrule tests. Fixes #8

This commit is contained in:
Tulir Asokan 2020-05-02 01:37:13 +03:00
commit 676a8e21d9
5 changed files with 64 additions and 59 deletions

View file

@ -25,7 +25,7 @@ import (
)
func TestPushCondition_Match_DisplayName(t *testing.T) {
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgText,
Body: "tulir: test mention",
})
@ -34,7 +34,7 @@ func TestPushCondition_Match_DisplayName(t *testing.T) {
}
func TestPushCondition_Match_DisplayName_Fail(t *testing.T) {
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgText,
Body: "not a mention",
})
@ -44,7 +44,7 @@ func TestPushCondition_Match_DisplayName_Fail(t *testing.T) {
func TestPushCondition_Match_DisplayName_FailsOnEmptyRoom(t *testing.T) {
emptyRoom := newFakeRoom(0)
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgText,
Body: "tulir: this room doesn't have the owner Member available, so it fails.",
})

View file

@ -26,11 +26,9 @@ import (
func TestPushCondition_Match_KindEvent_MsgType(t *testing.T) {
condition := newMatchPushCondition("content.msgtype", "m.emote")
evt := newFakeEvent(event.EventMessage, event.Content{
Raw: map[string]interface{}{
"msgtype": "m.emote",
"body": "tests gomuks pushconditions",
},
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "tests gomuks pushconditions",
})
assert.True(t, condition.Match(blankTestRoom, evt))
}
@ -38,60 +36,58 @@ func TestPushCondition_Match_KindEvent_MsgType(t *testing.T) {
func TestPushCondition_Match_KindEvent_MsgType_Fail(t *testing.T) {
condition := newMatchPushCondition("content.msgtype", "m.emote")
evt := newFakeEvent(event.EventMessage, event.Content{
Raw: map[string]interface{}{
"msgtype": "m.text",
"body": "I'm testing gomuks pushconditions",
},
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgText,
Body: "I'm testing gomuks pushconditions",
})
assert.False(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_EventType(t *testing.T) {
condition := newMatchPushCondition("type", "m.room.foo")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
assert.True(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_EventType_IllegalGlob(t *testing.T) {
condition := newMatchPushCondition("type", "m.room.invalid_glo[b")
evt := newFakeEvent(event.NewEventType("m.room.invalid_glob"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.invalid_glob"), &struct{}{})
assert.False(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_Sender_Fail(t *testing.T) {
condition := newMatchPushCondition("sender", "@foo:maunium.net")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
assert.False(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_RoomID(t *testing.T) {
condition := newMatchPushCondition("room_id", "!fakeroom:maunium.net")
evt := newFakeEvent(event.NewEventType(""), event.Content{})
evt := newFakeEvent(event.NewEventType(""), &struct{}{})
assert.True(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_BlankStateKey(t *testing.T) {
condition := newMatchPushCondition("state_key", "")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
assert.True(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_BlankStateKey_Fail(t *testing.T) {
condition := newMatchPushCondition("state_key", "not blank")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
assert.False(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_NonBlankStateKey(t *testing.T) {
condition := newMatchPushCondition("state_key", "*:maunium.net")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
evt.StateKey = (*string)(&evt.Sender)
assert.True(t, condition.Match(blankTestRoom, evt))
}
func TestPushCondition_Match_KindEvent_UnknownKey(t *testing.T) {
condition := newMatchPushCondition("non-existent key", "doesn't affect anything")
evt := newFakeEvent(event.NewEventType("m.room.foo"), event.Content{})
evt := newFakeEvent(event.NewEventType("m.room.foo"), &struct{}{})
assert.False(t, condition.Match(blankTestRoom, evt))
}

View file

@ -17,6 +17,7 @@
package pushrules_test
import (
"encoding/json"
"fmt"
"testing"
@ -45,8 +46,14 @@ func init() {
ID: "$123:maunium.net",
RoomID: "!fakeroom:maunium.net",
Content: event.Content{
MsgType: event.MsgText,
Body: "test",
Raw: map[string]interface{}{
"msgtype": "m.text",
"body": "test",
},
Parsed: &event.MessageEventContent{
MsgType: event.MsgText,
Body: "test",
},
},
}
@ -56,7 +63,21 @@ func init() {
}
}
func newFakeEvent(evtType event.Type, content event.Content) *event.Event {
func newFakeEvent(evtType event.Type, parsed interface{}) *event.Event {
data, err := json.Marshal(parsed)
if err != nil {
panic(err)
}
var raw map[string]interface{}
err = json.Unmarshal(data, &raw)
if err != nil {
panic(err)
}
content := event.Content{
VeryRaw: data,
Raw: raw,
Parsed: parsed,
}
return &event.Event{
Sender: "@tulir:maunium.net",
Type: evtType,
@ -86,23 +107,23 @@ func TestPushCondition_Match_InvalidKind(t *testing.T) {
condition := &pushrules.PushCondition{
Kind: pushrules.PushCondKind("invalid"),
}
evt := newFakeEvent(event.Type{Type: "m.room.foobar"}, event.Content{})
evt := newFakeEvent(event.Type{Type: "m.room.foobar"}, &struct{}{})
assert.False(t, condition.Match(blankTestRoom, evt))
}
type FakeRoom struct {
members map[string]*event.Member
members map[string]*event.MemberEventContent
owner string
}
func newFakeRoom(memberCount int) *FakeRoom {
room := &FakeRoom{
owner: "@tulir:maunium.net",
members: make(map[string]*event.Member),
members: make(map[string]*event.MemberEventContent),
}
if memberCount >= 1 {
room.members["@tulir:maunium.net"] = &event.Member{
room.members["@tulir:maunium.net"] = &event.MemberEventContent{
Membership: event.MembershipJoin,
Displayname: "tulir",
}
@ -110,7 +131,7 @@ func newFakeRoom(memberCount int) *FakeRoom {
for i := 0; i < memberCount-1; i++ {
mxid := fmt.Sprintf("@extrauser_%d:matrix.org", i)
room.members[mxid] = &event.Member{
room.members[mxid] = &event.MemberEventContent{
Membership: event.MembershipJoin,
Displayname: fmt.Sprintf("Extra User %d", i),
}

View file

@ -64,11 +64,11 @@ func TestPushRuleArray_GetActions_FirstMatchReturns(t *testing.T) {
rules := pushrules.PushRuleArray{rule1, rule2, rule3}
event := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
assert.Equal(t, rules.GetActions(blankTestRoom, event), actions2)
assert.Equal(t, rules.GetActions(blankTestRoom, evt), actions2)
}
func TestPushRuleArray_GetActions_NoMatchesIsNil(t *testing.T) {
@ -110,7 +110,7 @@ func TestPushRuleArray_GetActions_NoMatchesIsNil(t *testing.T) {
rules := pushrules.PushRuleArray{rule1, rule2, rule3}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -159,7 +159,7 @@ func TestPushRuleMap_GetActions_RoomRuleExists(t *testing.T) {
Type: pushrules.RoomRule,
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -197,7 +197,7 @@ func TestPushRuleMap_GetActions_RoomRuleDoesntExist(t *testing.T) {
Type: pushrules.RoomRule,
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -246,7 +246,7 @@ func TestPushRuleMap_GetActions_SenderRuleExists(t *testing.T) {
Type: pushrules.SenderRule,
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})

View file

@ -34,11 +34,7 @@ func TestPushRule_Match_Conditions(t *testing.T) {
Conditions: []*pushrules.PushCondition{cond1, cond2},
}
evt := newFakeEvent(event.EventMessage, event.Content{
Raw: map[string]interface{}{
"msgtype": "m.emote",
"body": "is testing pushrules",
},
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -54,11 +50,7 @@ func TestPushRule_Match_Conditions_Disabled(t *testing.T) {
Conditions: []*pushrules.PushCondition{cond1, cond2},
}
evt := newFakeEvent(event.EventMessage, event.Content{
Raw: map[string]interface{}{
"msgtype": "m.emote",
"body": "is testing pushrules",
},
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -74,11 +66,7 @@ func TestPushRule_Match_Conditions_FailIfOneFails(t *testing.T) {
Conditions: []*pushrules.PushCondition{cond1, cond2},
}
evt := newFakeEvent(event.EventMessage, event.Content{
Raw: map[string]interface{}{
"msgtype": "m.text",
"body": "I'm testing pushrules",
},
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgText,
Body: "I'm testing pushrules",
})
@ -92,7 +80,7 @@ func TestPushRule_Match_Content(t *testing.T) {
Pattern: "is testing*",
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is testing pushrules",
})
@ -106,7 +94,7 @@ func TestPushRule_Match_Content_Fail(t *testing.T) {
Pattern: "is testing*",
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is not testing pushrules",
})
@ -120,7 +108,7 @@ func TestPushRule_Match_Content_ImplicitGlob(t *testing.T) {
Pattern: "testing",
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "is not testing pushrules",
})
@ -134,7 +122,7 @@ func TestPushRule_Match_Content_IllegalGlob(t *testing.T) {
Pattern: "this is not a valid glo[b",
}
evt := newFakeEvent(event.EventMessage, event.Content{
evt := newFakeEvent(event.EventMessage, &event.MessageEventContent{
MsgType: event.MsgEmote,
Body: "this is not a valid glob",
})
@ -148,7 +136,7 @@ func TestPushRule_Match_Room(t *testing.T) {
RuleID: "!fakeroom:maunium.net",
}
evt := newFakeEvent(event.EventMessage, event.Content{})
evt := newFakeEvent(event.EventMessage, &struct{}{})
assert.True(t, rule.Match(blankTestRoom, evt))
}
@ -159,7 +147,7 @@ func TestPushRule_Match_Room_Fail(t *testing.T) {
RuleID: "!otherroom:maunium.net",
}
evt := newFakeEvent(event.EventMessage, event.Content{})
evt := newFakeEvent(event.EventMessage, &struct{}{})
assert.False(t, rule.Match(blankTestRoom, evt))
}
@ -170,7 +158,7 @@ func TestPushRule_Match_Sender(t *testing.T) {
RuleID: "@tulir:maunium.net",
}
evt := newFakeEvent(event.EventMessage, event.Content{})
evt := newFakeEvent(event.EventMessage, &struct{}{})
assert.True(t, rule.Match(blankTestRoom, evt))
}
@ -181,7 +169,7 @@ func TestPushRule_Match_Sender_Fail(t *testing.T) {
RuleID: "@someone:matrix.org",
}
evt := newFakeEvent(event.EventMessage, event.Content{})
evt := newFakeEvent(event.EventMessage, &struct{}{})
assert.False(t, rule.Match(blankTestRoom, evt))
}
@ -192,6 +180,6 @@ func TestPushRule_Match_UnknownTypeAlwaysFail(t *testing.T) {
RuleID: "@someone:matrix.org",
}
evt := newFakeEvent(event.EventMessage, event.Content{})
evt := newFakeEvent(event.EventMessage, &struct{}{})
assert.False(t, rule.Match(blankTestRoom, evt))
}