blob: 52ba279b6ca1c12774c145162bfc293eb351c77b [file] [log] [blame]
import {assert} from 'chai';
import {renderMarkdown, shouldRenderMarkdown} from './md-helper.js';
describe('shouldRenderMarkdown', () => {
it('defaults to false', () => {
const actual = shouldRenderMarkdown();
assert.isFalse(actual);
});
it('returns true for enabled projects', () => {
const actual = shouldRenderMarkdown({project:'astor',
availableProjects: new Set(['astor'])});
assert.isTrue(actual);
});
it('returns false for disabled projects', () => {
const actual = shouldRenderMarkdown({project:'hazelnut',
availableProjects: new Set(['astor'])});
assert.isFalse(actual);
});
it('user pref can disable markdown', () => {
const actual = shouldRenderMarkdown({project:'astor',
enabledProjects: new Set(['astor']), enabled: false});
assert.isFalse(actual);
});
});
describe('renderMarkdown', () => {
it('can render empty string', () => {
const actual = renderMarkdown('');
assert.equal(actual, '');
});
it('can render basic string', () => {
const actual = renderMarkdown('hello world');
assert.equal(actual, '<p>hello world</p>\n');
});
it('can render lists', () => {
const input = '* First item\n* Second item\n* Third item\n* Fourth item';
const actual = renderMarkdown(input);
const expected = '<ul>\n<li>First item</li>\n<li>Second item</li>\n' +
'<li>Third item</li>\n<li>Fourth item</li>\n</ul>\n';
assert.equal(actual, expected);
});
it('can render headings', () => {
const actual = renderMarkdown('# Heading level 1\n\n## Heading level 2');
assert.equal(actual,
'<h1>Heading level 1</h1>\n<h2>Heading level 2</h2>\n');
});
it('can render codeblocks', () => {
const actual = renderMarkdown('```\nhello world\n```');
assert.equal(actual,
'<pre><code>hello world\n</code></pre>\n');
});
describe('can render links', () => {
it('for simple links', () => {
const actual = renderMarkdown('[clickme](http://google.com)');
const expected = `<p><span class="annotated-link"><a title="" ` +
`href="http://google.com"><span class="material-icons link">` +
`link</span>clickme</a><span class="tooltip">Link destination: ` +
`http://google.com</span></span></p>\n`;
assert.equal(actual, expected);
});
it('and indicates malformed link', () => {
const actual = renderMarkdown('[clickme](google.com)');
const expected = `<p><span class="annotated-link"><a title="" ` +
`href="google.com"><span class="material-icons link_off">link_off` +
`</span>clickme</a><span class="tooltip">Link may be malformed: ` +
`google.com</span></span></p>\n`;
assert.equal(actual, expected);
});
it('correctly renders emails', () => {
const actual = renderMarkdown('[person@google.com](mailto:person@google.com)');
const expected = `<p><span class="annotated-link"><a title="" ` +
`href="mailto:person@google.com"><span class="material-icons link">` +
`link</span>person@google.com</a><span class="tooltip">Link destination: ` +
`mailto:person@google.com</span></span></p>\n`;
assert.equal(actual, expected);
});
it('correctly renders monorail user links', () => {
const actual = renderMarkdown('[person@google.com](/u/person@google.com)');
const expected = `<p><span class="annotated-link"><a title="" ` +
`href="/u/person@google.com"><span class="material-icons ` +
`link">link</span>person@google.com</a><span class="tooltip">Link destination: ` +
`/u/person@google.com</span></span></p>\n`
assert.equal(actual, expected)
});
});
it('preserves bolding from description templates', () => {
const input = `<b>What's the problem?</b>\n<b>1.</b> A\n<b>2.</b> B`;
const actual = renderMarkdown(input);
const expected = `<p><strong>What's the problem?</strong>\n<strong>1.` +
`</strong> A\n<strong>2.</strong> B</p>\n`;
assert.equal(actual, expected);
});
it('forbids src', () => {
const actual = renderMarkdown('<video id="foo" src="//youtube" control></video>');
assert.equal(actual, '<p><video id="foo"></video></p>\n');
});
});