summaryrefslogtreecommitdiff
path: root/addons/mail/static/tests/mail_utils_tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/static/tests/mail_utils_tests.js')
-rw-r--r--addons/mail/static/tests/mail_utils_tests.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/addons/mail/static/tests/mail_utils_tests.js b/addons/mail/static/tests/mail_utils_tests.js
new file mode 100644
index 00000000..b330dc37
--- /dev/null
+++ b/addons/mail/static/tests/mail_utils_tests.js
@@ -0,0 +1,111 @@
+odoo.define('mail.mail_utils_tests', function (require) {
+"use strict";
+
+var utils = require('mail.utils');
+
+QUnit.module('mail', {}, function () {
+
+QUnit.module('Mail utils');
+
+QUnit.test('add_link utility function', function (assert) {
+ assert.expect(19);
+
+ var testInputs = {
+ 'http://admin:password@example.com:8/%2020': true,
+ 'https://admin:password@example.com/test': true,
+ 'www.example.com:8/test': true,
+ 'https://127.0.0.5:8069': true,
+ 'www.127.0.0.5': false,
+ 'should.notmatch': false,
+ 'fhttps://test.example.com/test': false,
+ "https://www.transifex.com/odoo/odoo-11/translate/#fr/lunch?q=text%3A'La+Tartiflette'": true,
+ 'https://www.transifex.com/odoo/odoo-11/translate/#fr/$/119303430?q=text%3ATartiflette': true,
+ 'https://tenor.com/view/chỗgiặt-dog-smile-gif-13860250': true,
+ 'http://www.boîtenoire.be': true,
+ };
+
+ _.each(testInputs, function (willLinkify, content) {
+ var output = utils.parseAndTransform(content, utils.addLink);
+ if (willLinkify) {
+ assert.strictEqual(output.indexOf('<a '), 0, "There should be a link");
+ assert.strictEqual(output.indexOf('</a>'), (output.length - 4), "Link should match the whole text");
+ } else {
+ assert.strictEqual(output.indexOf('<a '), -1, "There should be no link");
+ }
+ });
+});
+
+QUnit.test('addLink: linkify inside text node (1 occurrence)', function (assert) {
+ assert.expect(5);
+
+ const content = '<p>some text https://somelink.com</p>';
+ const linkified = utils.parseAndTransform(content, utils.addLink);
+ assert.ok(
+ linkified.startsWith('<p>some text <a'),
+ "linkified text should start with non-linkified start part, followed by an '<a>' tag"
+ );
+ assert.ok(
+ linkified.endsWith('</a></p>'),
+ "linkified text should end with closing '<a>' tag"
+ );
+
+ // linkify may add some attributes. Since we do not care of their exact
+ // stringified representation, we continue deeper assertion with query
+ // selectors.
+ const fragment = document.createDocumentFragment();
+ const div = document.createElement('div');
+ fragment.appendChild(div);
+ div.innerHTML = linkified;
+ assert.strictEqual(
+ div.textContent,
+ 'some text https://somelink.com',
+ "linkified text should have same text content as non-linkified version"
+ );
+ assert.strictEqual(
+ div.querySelectorAll(':scope a').length,
+ 1,
+ "linkified text should have an <a> tag"
+ );
+ assert.strictEqual(
+ div.querySelector(':scope a').textContent,
+ 'https://somelink.com',
+ "text content of link should be equivalent of its non-linkified version"
+ );
+});
+
+QUnit.test('addLink: linkify inside text node (2 occurrences)', function (assert) {
+ assert.expect(4);
+
+ // linkify may add some attributes. Since we do not care of their exact
+ // stringified representation, we continue deeper assertion with query
+ // selectors.
+ const content = '<p>some text https://somelink.com and again https://somelink2.com ...</p>';
+ const linkified = utils.parseAndTransform(content, utils.addLink);
+ const fragment = document.createDocumentFragment();
+ const div = document.createElement('div');
+ fragment.appendChild(div);
+ div.innerHTML = linkified;
+ assert.strictEqual(
+ div.textContent,
+ 'some text https://somelink.com and again https://somelink2.com ...',
+ "linkified text should have same text content as non-linkified version"
+ );
+ assert.strictEqual(
+ div.querySelectorAll(':scope a').length,
+ 2,
+ "linkified text should have 2 <a> tags"
+ );
+ assert.strictEqual(
+ div.querySelectorAll(':scope a')[0].textContent,
+ 'https://somelink.com',
+ "text content of 1st link should be equivalent to its non-linkified version"
+ );
+ assert.strictEqual(
+ div.querySelectorAll(':scope a')[1].textContent,
+ 'https://somelink2.com',
+ "text content of 2nd link should be equivalent to its non-linkified version"
+ );
+});
+
+});
+});