2020-10-14 01:45:52 +02:00
package chat
import (
"testing"
2021-07-20 04:22:29 +02:00
"github.com/owncast/owncast/core/chat/events"
2020-10-14 01:45:52 +02:00
)
// Test a bunch of arbitrary markup and markdown to make sure we get sanitized
// and fully rendered HTML out of it.
func TestRenderAndSanitize ( t * testing . T ) {
messageContent := `
2023-06-26 20:37:34 +02:00
Test one two three ! I go to http : //yahoo.com and search for _sports_ and **answers**.
Here is an iframe < iframe src = "http://yahoo.com" > < / iframe >
# # blah blah blah
[ test link ] ( http : //owncast.online)
< img class = "emoji" src = "/img/emoji/bananadance.gif" > `
2020-10-14 01:45:52 +02:00
2023-06-27 23:45:45 +02:00
expected := ` < p > Test one two three ! I go to < a href = "http://yahoo.com" rel = "nofollow noreferrer noopener" target = "_blank" > http : //yahoo.com</a> and search for <em>sports</em> and <strong>answers</strong>.
Here is an iframe < / p >
2020-10-14 01:45:52 +02:00
blah blah blah
2023-06-27 23:45:45 +02:00
< p > < a href = "http://owncast.online" rel = "nofollow noreferrer noopener" target = "_blank" > test link < / a >
< img class = "emoji" src = "/img/emoji/bananadance.gif" > < / p > `
2020-10-14 01:45:52 +02:00
2021-07-20 04:22:29 +02:00
result := events . RenderAndSanitize ( messageContent )
2020-10-14 01:45:52 +02:00
if result != expected {
t . Errorf ( "message rendering/sanitation does not match expected. Got\n%s, \n\n want:\n%s" , result , expected )
}
2021-03-09 08:20:15 +01:00
}
// Test to make sure we block remote images in chat messages.
func TestBlockRemoteImages ( t * testing . T ) {
2021-07-23 20:00:04 +02:00
messageContent := ` <img src="https://via.placeholder.com/img/emoji/350x150"> test ![](https://via.placeholder.com/img/emoji/350x150) `
2023-06-27 23:45:45 +02:00
expected := ` <p> test </p> `
2021-07-20 04:22:29 +02:00
result := events . RenderAndSanitize ( messageContent )
2020-10-14 01:45:52 +02:00
2021-03-09 08:20:15 +01:00
if result != expected {
t . Errorf ( "message rendering/sanitation does not match expected. Got\n%s, \n\n want:\n%s" , result , expected )
}
}
// Test to make sure emoji images are allowed in chat messages.
func TestAllowEmojiImages ( t * testing . T ) {
2021-07-23 20:01:30 +02:00
messageContent := ` <img alt=":beerparrot:" title=":beerparrot:" src="/img/emoji/beerparrot.gif"> test ![](/img/emoji/beerparrot.gif) `
2023-06-27 23:45:45 +02:00
expected := ` <p><img alt=":beerparrot:" title=":beerparrot:" src="/img/emoji/beerparrot.gif"> test <img src="/img/emoji/beerparrot.gif"></p> `
2021-07-20 04:22:29 +02:00
result := events . RenderAndSanitize ( messageContent )
2021-03-09 08:20:15 +01:00
if result != expected {
t . Errorf ( "message rendering/sanitation does not match expected. Got\n%s, \n\n want:\n%s" , result , expected )
}
2020-10-14 01:45:52 +02:00
}
2021-03-12 09:43:10 +01:00
// Test to verify we can pass raw html and render markdown.
func TestAllowHTML ( t * testing . T ) {
messageContent := ` <img src="/img/emoji/beerparrot.gif"><ul><li>**test thing**</li></ul> `
expected := "<p><img src=\"/img/emoji/beerparrot.gif\"><ul><li><strong>test thing</strong></li></ul></p>\n"
2021-07-20 04:22:29 +02:00
result := events . RenderMarkdown ( messageContent )
2021-03-12 09:43:10 +01:00
if result != expected {
t . Errorf ( "message rendering does not match expected. Got\n%s, \n\n want:\n%s" , result , expected )
}
}