# -*- coding: utf-8 -*- # Copyright (C) 2014-2017 Andrey Antukh # Copyright (C) 2014-2017 Jesús Espino # Copyright (C) 2014-2017 David Barragán # Copyright (C) 2014-2017 Alejandro Alonso # Copyright (C) 2014-2017 Anler Hernández # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from unittest.mock import patch, MagicMock from taiga.mdrender.extensions import emojify from taiga.mdrender.service import render, cache_by_sha, get_diff_of_htmls, render_and_extract from datetime import datetime import pytz dummy_project = MagicMock() dummy_project.id = 1 dummy_project.slug = "test" def test_proccessor_valid_emoji(): result = emojify.EmojifyPreprocessor().run(["**:smile:**"]) assert result == ["**![smile](http://localhost:8000/static/img/emojis/smile.png)**"] def test_proccessor_invalid_emoji(): result = emojify.EmojifyPreprocessor().run(["**:notvalidemoji:**"]) assert result == ["**:notvalidemoji:**"] def test_mentions_valid_username(): with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: dummy_uuser = MagicMock() dummy_uuser.get_full_name.return_value = "Hermione Granger" get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) result = render(dummy_project, "text @hermione text") get_user_model_mock.return_value.objects.get.assert_called_with(username="hermione") assert result == ('

text @hermione text

') def test_mentions_valid_username_with_points(): with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: dummy_uuser = MagicMock() dummy_uuser.get_full_name.return_value = "Luna Lovegood" get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) result = render(dummy_project, "text @luna.lovegood text") get_user_model_mock.return_value.objects.get.assert_called_with(username="luna.lovegood") assert result == ('

text @luna.lovegood text

') def test_mentions_valid_username_with_dash(): with patch("taiga.mdrender.extensions.mentions.get_user_model") as get_user_model_mock: dummy_uuser = MagicMock() dummy_uuser.get_full_name.return_value = "Ginny Weasley" get_user_model_mock.return_value.objects.get = MagicMock(return_value=dummy_uuser) result = render(dummy_project, "text @super-ginny text") get_user_model_mock.return_value.objects.get.assert_called_with(username="super-ginny") assert result == ('

text @super-ginny text

') def test_proccessor_valid_us_reference(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: instance = mock.return_value instance.content_type.model = "userstory" instance.content_object.subject = "test" result = render(dummy_project, "**#1**") expected_result = '

#1

' assert result == expected_result def test_proccessor_valid_issue_reference(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: instance = mock.return_value instance.content_type.model = "issue" instance.content_object.subject = "test" result = render(dummy_project, "**#2**") expected_result = '

#2

' assert result == expected_result def test_proccessor_valid_task_reference(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: instance = mock.return_value instance.content_type.model = "task" instance.content_object.subject = "test" result = render(dummy_project, "**#3**") expected_result = '

#3

' 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, "**#4**") assert result == "

#4

" def test_proccessor_invalid_reference(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: mock.return_value = None result = render(dummy_project, "**#5**") assert result == "

#5

" def test_render_wiki_strong(): assert render(dummy_project, "**test**") == "

test

" assert render(dummy_project, "__test__") == "

test

" def test_render_wiki_italic(): assert render(dummy_project, "*test*") == "

test

" assert render(dummy_project, "_test_") == "

test

" def test_render_wiki_strike(): assert render(dummy_project, "~~test~~") == "

test

" def test_render_wikilink(): expected_result = "

test

" assert render(dummy_project, "[[test]]") == expected_result def test_render_wikilink_1(): expected_result = "

test

" assert render(dummy_project, "[[test]]") == expected_result def test_render_wikilink_2(): expected_result = "

test page

" assert render(dummy_project, "[[test page]]") == expected_result def test_render_wikilink_3(): expected_result = "

TestPage

" assert render(dummy_project, "[[TestPage]]") == expected_result def test_render_wikilink_with_custom_title(): expected_result = "

custom

" assert render(dummy_project, "[[test|custom]]") == expected_result def test_render_wikilink_slug_to_wikipages(): expected_result = "

wiki

" assert render(dummy_project, "[wiki](wiki_page \"wiki page\")") == expected_result def test_render_wikilink_relative_to_absolute(): expected_result = "

test project

" assert render(dummy_project, "[test project](/project/test/)") == expected_result def test_render_reference_links(): expected_result = "

An example of reference link

" source = "An [example][id] of reference link\n [id]: http://example.com/ \"Title\"" assert render(dummy_project, source) == expected_result def test_render_url_autolinks(): expected_result = "

Test the http://example.com/ autolink

" 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\"

" def test_render_relative_image(): assert render(dummy_project, "![test](test.png)") == "

\"test\"

" def test_render_triple_quote_code(): expected_result = '
print("test")\n
' assert render(dummy_project, "```python\nprint(\"test\")\n```") == expected_result 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(pytz.utc) 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>" def test_render_and_extract_references(): with patch("taiga.mdrender.extensions.references.get_instance_by_ref") as mock: instance = mock.return_value instance.content_type.model = "issue" instance.content_object.subject = "test" (_, extracted) = render_and_extract(dummy_project, "**#1**") assert extracted['references'] == [instance.content_object]