Improving coverage of mdrender to 100%

remotes/origin/enhancement/email-actions
Jesús Espino 2014-05-21 18:57:37 +02:00
parent c7ee910647
commit 6a48e28ca4
7 changed files with 100 additions and 103 deletions

View File

@ -181,7 +181,3 @@ class EmojifyPreprocessor(Preprocessor):
new_lines.append(line)
return new_lines
def makeExtension(configs=None):
return EmojifyExtension(configs=configs)

View File

@ -1,16 +0,0 @@
# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
from markdown.extensions.codehilite import CodeHiliteExtension
class HiddenHiliteExtension(CodeHiliteExtension):
"""A subclass of CodeHiliteExtension that doesn't highlight on its own.
This just enables the fenced code extension to use syntax highlighting,
without adding syntax highlighting or line numbers to any additional code
blocks.
"""
def extendMarkdown(self, md, md_globals):
md.registerExtension(self)

View File

@ -46,26 +46,21 @@ class MentionsExtension(Extension):
class MentionsPattern(Pattern):
def handleMatch(self, m):
if m.group(2).strip():
username = m.group(2)
username = m.group(2)
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return "@{}".format(username)
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return "@{}".format(username)
url = "/#/profile/{}".format(username)
url = "/#/profile/{}".format(username)
link_text = "@{}".format(username)
link_text = "@{}".format(username)
a = etree.Element('a')
a.text = link_text
a.set('href', url)
a.set('alt', user.get_full_name())
a.set('title', user.get_full_name())
a.set('class', "mention")
return a
return ''
def makeExtension(configs=None):
return MentionsExtension(configs=configs)
a = etree.Element('a')
a.text = link_text
a.set('href', url)
a.set('alt', user.get_full_name())
a.set('title', user.get_full_name())
a.set('class', "mention")
return a

View File

@ -53,44 +53,38 @@ class TaigaReferencesPattern(Pattern):
super().__init__(pattern)
def handleMatch(self, m):
if m.group(2).strip():
obj_ref = m.group(2)
obj_ref = m.group(2)
instance = get_instance_by_ref(self.project.id, obj_ref)
if instance is None:
return "#{}".format(obj_ref)
instance = get_instance_by_ref(self.project.id, obj_ref)
if instance is None:
return "#{}".format(obj_ref)
subject = instance.content_object.subject
subject = instance.content_object.subject
if instance.content_type.model == "userstory":
obj_section = "user-story"
html_classes = "reference user-story"
elif instance.content_type.model == "task":
obj_section = "tasks"
html_classes = "reference task"
elif instance.content_type.model == "issue":
obj_section = "issues"
html_classes = "reference issue"
else:
return "#{}".format(obj_ref)
if instance.content_type.model == "userstory":
obj_section = "user-story"
html_classes = "reference user-story"
elif instance.content_type.model == "task":
obj_section = "tasks"
html_classes = "reference task"
elif instance.content_type.model == "issue":
obj_section = "issues"
html_classes = "reference issue"
else:
return "#{}".format(obj_ref)
url = "/#/project/{}/{}/{}".format(
self.project.slug,
obj_section,
obj_ref
)
link_text = "#{}".format(obj_ref)
url = "/#/project/{}/{}/{}".format(
self.project.slug,
obj_section,
obj_ref
)
link_text = "#{}".format(obj_ref)
a = etree.Element('a')
a.text = link_text
a.set('href', url)
a.set('alt', subject)
a.set('title', subject)
a.set('class', html_classes)
return a
return ''
def makeExtension(configs=None):
return TaigaReferencesExtension(configs=configs)
a = etree.Element('a')
a.text = link_text
a.set('href', url)
a.set('alt', subject)
a.set('title', subject)
a.set('class', html_classes)
return a

View File

@ -41,23 +41,20 @@ class WikiLinks(Pattern):
self.config = config
def handleMatch(self, m):
if m.group(2).strip():
base_url, end_url, html_class = self._getMeta()
label = m.group(2).strip()
url = self.config['build_url'](label, base_url, end_url)
base_url, end_url, html_class = self._getMeta()
label = m.group(2).strip()
url = self.config['build_url'](label, base_url, end_url)
if m.group(3):
title = m.group(3).strip()[1:]
else:
title = label
a = etree.Element('a')
a.text = title
a.set('href', url)
if html_class:
a.set('class', html_class)
if m.group(3):
title = m.group(3).strip()[1:]
else:
a = ''
title = label
a = etree.Element('a')
a.text = title
a.set('href', url)
if html_class:
a.set('class', html_class)
return a
def _getMeta(self):
@ -65,15 +62,4 @@ class WikiLinks(Pattern):
base_url = self.config['base_url']
end_url = self.config['end_url']
html_class = self.config['html_class']
if hasattr(self.md, 'Meta'):
if 'wiki_base_url' in self.md.Meta:
base_url = self.md.Meta['wiki_base_url'][0]
if 'wiki_end_url' in self.md.Meta:
end_url = self.md.Meta['wiki_end_url'][0]
if 'wiki_html_class' in self.md.Meta:
html_class = self.md.Meta['wiki_html_class'][0]
return base_url, end_url, html_class
def makeExtension(configs=None) :
return WikiLinkExtension(configs=configs)

View File

@ -9,7 +9,6 @@ from fn import F
from .extensions.autolink import AutolinkExtension
from .extensions.automail import AutomailExtension
from .extensions.hidden_hilite import HiddenHiliteExtension
from .extensions.semi_sane_lists import SemiSaneListExtension
from .extensions.spaced_link import SpacedLinkExtension
from .extensions.strikethrough import StrikethroughExtension
@ -47,7 +46,7 @@ def cache_by_sha(func):
if cached is not None:
return cached
returned_value = func(text)
returned_value = func(project, text)
cache.set(key, returned_value, timeout=None)
return returned_value

View File

@ -5,12 +5,14 @@ import pytest
import taiga.base
from taiga.mdrender.extensions import mentions
from taiga.mdrender.extensions import emojify
from taiga.mdrender.service import render
from taiga.mdrender.service import render, cache_by_sha, get_diff_of_htmls
from taiga.projects.references import services
from taiga.users.models import User
from datetime import datetime
dummy_project = MagicMock()
dummy_project.id = 1
dummy_project.slug = "test"
@ -65,6 +67,14 @@ def test_proccessor_valid_task_reference():
expected_result = '<p><strong><a alt="test" class="reference task" href="/#/project/test/tasks/1" title="test">&num;1</a></strong></p>'
assert result == expected_result
def test_proccessor_invalid_type_reference():
with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock:
instance = mock.return_value
instance.content_type.model = "other"
instance.content_object.subject = "test"
result = render(dummy_project, "**#1**")
assert result == "<p><strong>#1</strong></p>"
def test_proccessor_invalid_reference():
with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock:
mock.return_value = None
@ -106,6 +116,16 @@ def test_render_url_autolinks():
source = "Test the http://example.com/ autolink"
assert render(dummy_project, source) == expected_result
def test_render_url_autolinks_without_http():
expected_result = "<p>Test the <a href=\"http://www.example.com\">www.example.com</a> autolink</p>"
source = "Test the www.example.com autolink"
assert render(dummy_project, source) == expected_result
def test_render_url_automail():
expected_result = "<p>Test the <a href=\"mailto:example@example.com\">example@example.com</a> automail</p>"
source = "Test the example@example.com automail"
assert render(dummy_project, source) == expected_result
def test_render_absolute_image():
assert render(dummy_project, "![test](/test.png)") == "<p><img alt=\"test\" src=\"/test.png\" /></p>"
@ -119,3 +139,26 @@ def test_render_triple_quote_code():
def test_render_triple_quote_and_lang_code():
expected_result = "<div class=\"codehilite\"><pre><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s\">&quot;test&quot;</span><span class=\"p\">)</span>\n</pre></div>"
assert render(dummy_project, "```python\nprint(\"test\")\n```") == expected_result
def test_cache_by_sha():
@cache_by_sha
def test_cache(project, text):
return datetime.now()
result1 = test_cache(dummy_project, "test")
result2 = test_cache(dummy_project, "test2")
assert result1 != result2
result3 = test_cache(dummy_project, "test")
assert result1 == result3
def test_get_diff_of_htmls_insertions():
result = get_diff_of_htmls("", "<p>test</p>")
assert result == "<ins style=\"background:#e6ffe6;\">&lt;p&gt;test&lt;/p&gt;</ins>"
def test_get_diff_of_htmls_deletions():
result = get_diff_of_htmls("<p>test</p>", "")
assert result == "<del style=\"background:#ffe6e6;\">&lt;p&gt;test&lt;/p&gt;</del>"
def test_get_diff_of_htmls_modifications():
result = get_diff_of_htmls("<p>test1</p>", "<p>1test</p>")
assert result == "<span>&lt;p&gt;</span><ins style=\"background:#e6ffe6;\">1</ins><span>test</span><del style=\"background:#ffe6e6;\">1</del><span>&lt;/p&gt;</span>"