From 6a48e28ca4676fb28da0d80f81610756372dfe77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 21 May 2014 18:57:37 +0200 Subject: [PATCH] Improving coverage of mdrender to 100% --- taiga/mdrender/extensions/emojify.py | 4 -- taiga/mdrender/extensions/hidden_hilite.py | 16 ------ taiga/mdrender/extensions/mentions.py | 33 +++++------ taiga/mdrender/extensions/references.py | 64 ++++++++++------------ taiga/mdrender/extensions/wikilinks.py | 38 ++++--------- taiga/mdrender/service.py | 3 +- tests/unit/test_mdrender.py | 45 ++++++++++++++- 7 files changed, 100 insertions(+), 103 deletions(-) delete mode 100644 taiga/mdrender/extensions/hidden_hilite.py diff --git a/taiga/mdrender/extensions/emojify.py b/taiga/mdrender/extensions/emojify.py index 620cac02..c7b4a19c 100644 --- a/taiga/mdrender/extensions/emojify.py +++ b/taiga/mdrender/extensions/emojify.py @@ -181,7 +181,3 @@ class EmojifyPreprocessor(Preprocessor): new_lines.append(line) return new_lines - - -def makeExtension(configs=None): - return EmojifyExtension(configs=configs) diff --git a/taiga/mdrender/extensions/hidden_hilite.py b/taiga/mdrender/extensions/hidden_hilite.py deleted file mode 100644 index b1fe036c..00000000 --- a/taiga/mdrender/extensions/hidden_hilite.py +++ /dev/null @@ -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) diff --git a/taiga/mdrender/extensions/mentions.py b/taiga/mdrender/extensions/mentions.py index 7bb8b29c..ada9b1f7 100644 --- a/taiga/mdrender/extensions/mentions.py +++ b/taiga/mdrender/extensions/mentions.py @@ -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 diff --git a/taiga/mdrender/extensions/references.py b/taiga/mdrender/extensions/references.py index 861ddd68..6fcbd240 100644 --- a/taiga/mdrender/extensions/references.py +++ b/taiga/mdrender/extensions/references.py @@ -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 diff --git a/taiga/mdrender/extensions/wikilinks.py b/taiga/mdrender/extensions/wikilinks.py index d33a723c..25a9d4d7 100644 --- a/taiga/mdrender/extensions/wikilinks.py +++ b/taiga/mdrender/extensions/wikilinks.py @@ -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) diff --git a/taiga/mdrender/service.py b/taiga/mdrender/service.py index 8f44e8f8..d98359c2 100644 --- a/taiga/mdrender/service.py +++ b/taiga/mdrender/service.py @@ -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 diff --git a/tests/unit/test_mdrender.py b/tests/unit/test_mdrender.py index 3d4faede..a3b8f09a 100644 --- a/tests/unit/test_mdrender.py +++ b/tests/unit/test_mdrender.py @@ -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 = '

#1

' 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 == "

#1

" + 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 = "

Test the www.example.com autolink

" + source = "Test the www.example.com autolink" + assert render(dummy_project, source) == expected_result + +def test_render_url_automail(): + expected_result = "

Test the example@example.com automail

" + 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)") == "

\"test\"

" @@ -119,3 +139,26 @@ def test_render_triple_quote_code(): def test_render_triple_quote_and_lang_code(): expected_result = "
print("test")\n
" 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("", "

test

") + assert result == "<p>test</p>" + +def test_get_diff_of_htmls_deletions(): + result = get_diff_of_htmls("

test

", "") + assert result == "<p>test</p>" + +def test_get_diff_of_htmls_modifications(): + result = get_diff_of_htmls("

test1

", "

1test

") + assert result == "<p>1test1</p>"