discourse/test/javascripts/lib/tooltip-test.js.es6

60 lines
1.3 KiB
Plaintext
Raw Normal View History

import { registerTooltip, registerHoverTooltip } from "discourse/lib/tooltip";
2018-06-28 20:24:21 +08:00
// prettier-ignore
QUnit.module("lib:tooltip", {
beforeEach() {
fixture().html(
2018-11-26 18:15:23 +08:00
`
<a class='test-text-link' data-tooltip='XSS<s onmouseover\=alert(document.domain)>XSS'>test</a>
<a class='test-html-link' data-html-tooltip='<p>test</p>'>test</a>
`
2018-06-28 20:24:21 +08:00
);
}
});
2018-11-26 18:15:23 +08:00
QUnit.test("text support", async assert => {
const $testTextLink = fixture(".test-text-link");
registerTooltip($testTextLink);
await $testTextLink.click();
assert.equal(
fixture(".tooltip-content")
.html()
.trim(),
"XSS&lt;s onmouseover=alert(document.domain)&gt;XSS",
"it prevents XSS injection"
);
assert.equal(
fixture(".tooltip-content")
.text()
.trim(),
"XSS<s onmouseover=alert(document.domain)>XSS",
"it returns content as plain text"
);
});
QUnit.test("html support", async assert => {
const $testHtmlLink = fixture(".test-html-link");
registerHoverTooltip($testHtmlLink);
2018-11-26 18:15:23 +08:00
await $testHtmlLink.click();
assert.equal(
fixture(".tooltip-content")
.html()
.trim(),
"<p>test</p>",
"it doesnt escape HTML"
);
assert.equal(
fixture(".tooltip-content")
.text()
.trim(),
"test",
"it returns content as plain text"
);
2018-06-28 20:24:21 +08:00
});