package matrix
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/thegeeklab/wp-matrix/matrix/mocks"
"maunium.net/go/mautrix"
"maunium.net/go/mautrix/event"
)
func TestMessageSend(t *testing.T) {
tests := []struct {
name string
messageOpt MessageOptions
want event.MessageEventContent
wantErr bool
}{
{
name: "plain text message",
messageOpt: MessageOptions{
RoomID: "test-room",
Message: "hello world",
},
want: event.MessageEventContent{
MsgType: "m.text",
Body: "hello world",
},
},
{
name: "markdown message",
messageOpt: MessageOptions{
RoomID: "test-room",
Message: "**hello world**",
},
want: event.MessageEventContent{
MsgType: "m.text",
Body: "**hello world**",
Format: "org.matrix.custom.html",
FormattedBody: "hello world",
},
},
{
name: "html message",
messageOpt: MessageOptions{
RoomID: "test-room",
Message: "hello
world",
TemplateUnsafe: true,
},
want: event.MessageEventContent{
MsgType: "m.text",
Body: "hello\nworld",
Format: "org.matrix.custom.html",
FormattedBody: "hello
world",
},
},
{
name: "safe html message",
messageOpt: MessageOptions{
RoomID: "test-room",
Message: "hello world",
TemplateUnsafe: false,
},
want: event.MessageEventContent{
MsgType: "m.text",
Body: "hello world",
Format: "org.matrix.custom.html",
FormattedBody: "hello world<script>alert('XSS')</script>",
},
},
{
name: "unsafe html message",
messageOpt: MessageOptions{
RoomID: "test-room",
Message: "hello world",
TemplateUnsafe: true,
},
want: event.MessageEventContent{
MsgType: "m.text",
Body: "hello world",
Format: "org.matrix.custom.html",
FormattedBody: "hello world",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx := context.Background()
mockClient := mocks.NewMockAPIClient(t)
m := &Message{
Opt: tt.messageOpt,
client: mockClient,
}
mockClient.
On("SendMessageEvent", mock.Anything, tt.messageOpt.RoomID, event.EventMessage, tt.want).
Return(&mautrix.RespSendEvent{}, nil)
err := m.Send(ctx)
assert.Equal(t, tt.wantErr, err != nil)
})
}
}