diff --git a/filter_test.go b/filter_test.go new file mode 100644 index 0000000..ffe6c8e --- /dev/null +++ b/filter_test.go @@ -0,0 +1,89 @@ +package gomatrix + +import ( + "encoding/json" + "reflect" + "strings" + "testing" +) + +// sample from docs +var testFilter = ` +{ + "room": { + "state": { + "types": [ + "m.room.*" + ], + "not_rooms": [ + "!726s6s6q:example.com" + ] + }, + "timeline": { + "limit": 10, + "types": [ + "m.room.message" + ], + "not_rooms": [ + "!726s6s6q:example.com" + ], + "not_senders": [ + "@spam:example.com" + ] + }, + "ephemeral": { + "types": [ + "m.receipt", + "m.typing" + ], + "not_rooms": [ + "!726s6s6q:example.com" + ], + "not_senders": [ + "@spam:example.com" + ] + } + }, + "presence": { + "types": [ + "m.presence" + ], + "not_senders": [ + "@alice:example.com" + ] + }, + "event_format": "client", + "event_fields": [ + "type", + "content", + "sender" + ] +}` + +func TestFilterValidate(t *testing.T) { + var f Filter + err := json.NewDecoder(strings.NewReader(testFilter)).Decode(&f) + if err != nil { + t.Fatalf("TestFilterValidate: Failed to parse %s", testFilter) + } + // test validadtion success + if err = f.Validate(); err != nil { + t.Fatalf("TestFilterValidate: Filter validation has failed, event_format: '%s'", f.EventFormat) + } + // test validation fail + f.EventFormat = "unkown" + err = f.Validate() + if err == nil || err.Error() != "Bad event_format value. Must be one of [\"client\", \"federation\"]" { + t.Fatalf("TestFilterValidate: Filter validation false positive, event_format: '%s'", f.EventFormat) + } +} + +func TestDefaultFilter(t *testing.T) { + defaultFilter := DefaultFilter() + if reflect.TypeOf(defaultFilter) != reflect.TypeOf(Filter{}) { + t.Fatal("TestDefaultFilter: Invalid type for default filter") + } + if defaultFilter.EventFormat != "client" { + t.Fatalf("TestDefaultFilter: expected EventFormat %s, got %s", "client", defaultFilter.EventFormat) + } +}