from unittest import mock import pytest import taiga.base from taiga.mdrender.gfm import mentions from taiga.mdrender.gfm import emojify from taiga.mdrender.processors import references from taiga.mdrender.service import render class DummyClass: pass dummy_project = DummyClass() 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_proccessor_valid_user_mention(): DummyModel = DummyClass() DummyModel.objects = DummyClass() DummyModel.objects.filter = lambda username: ["test"] mentions.User = DummyModel result = mentions.MentionsPreprocessor().run(["**@user1**"]) assert result == ["**[@user1](/#/profile/user1 \"@user1\")**"] def test_proccessor_invalid_user_mention(): DummyModel = DummyClass() DummyModel.objects = DummyClass() DummyModel.objects.filter = lambda username: [] mentions.User = DummyModel result = mentions.MentionsPreprocessor().run(["**@notvaliduser**"]) assert result == ['**@notvaliduser**'] def test_proccessor_valid_us_reference(): class MockModelWithInstance: class objects: def filter(*args, **kwargs): dummy_instance = DummyClass() dummy_instance.subject = "test-subject" return [dummy_instance] UserStoryBack = references.UserStory references.UserStory = MockModelWithInstance result = references.references(dummy_project, "**#us1**") assert result == '**[#us1](/#/project/test/user-story/1 "test-subject")**' references.UserStory = UserStoryBack def test_proccessor_invalid_us_reference(): class MockModelEmpty: class objects: def filter(*args, **kwargs): return [] UserStoryBack = references.UserStory references.UserStory = MockModelEmpty result = references.references(dummy_project, "**#us1**") assert result == "**#us1**" references.UserStory = UserStoryBack def test_proccessor_valid_issue_reference(): class MockModelWithInstance: class objects: def filter(*args, **kwargs): dummy_instance = DummyClass() dummy_instance.subject = "test-subject" return [dummy_instance] IssueBack = references.Issue references.Issue = MockModelWithInstance result = references.references(dummy_project, "**#issue1**") assert result == '**[#issue1](/#/project/test/issues/1 "test-subject")**' references.Issue = IssueBack def test_proccessor_invalid_issue_reference(): class MockModelEmpty: class objects: def filter(*args, **kwargs): return [] IssueBack = references.Issue references.Issue = MockModelEmpty result = references.references(dummy_project, "**#issue1**") assert result == "**#issue1**" references.Issue = IssueBack def test_proccessor_valid_task_reference(): class MockModelWithInstance: class objects: def filter(*args, **kwargs): dummy_instance = DummyClass() dummy_instance.subject = "test-subject" return [dummy_instance] TaskBack = references.Task references.Task = MockModelWithInstance result = references.references(dummy_project, "**#task1**") assert result == '**[#task1](/#/project/test/tasks/1 "test-subject")**' references.Task = TaskBack def test_proccessor_invalid_task_reference(): class MockModelEmpty: class objects: def filter(*args, **kwargs): return [] TaskBack = references.Task references.Task = MockModelEmpty result = references.references(dummy_project, "**#task1**") assert result == "**#task1**" references.Task = TaskBack def test_proccessor_invalid_type_reference(): result = references.references(dummy_project, "**#invalid1**") assert result == "**#invalid1**" 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_absolute_link(): assert render(dummy_project, "[test](/test)") == "

test

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

test

" def test_render_wikilink(): expected_result = "

test

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

custom

" assert render(dummy_project, "[[test|custom]]") == 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_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, "```\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