diff --git a/taiga/base/utils/slug.py b/taiga/base/utils/slug.py
index 576ecfa3..d017664a 100644
--- a/taiga/base/utils/slug.py
+++ b/taiga/base/utils/slug.py
@@ -15,20 +15,27 @@
# along with this program. If not, see .
from django.utils import baseconv
-from django.template.defaultfilters import slugify
+from django.template.defaultfilters import slugify as django_slugify
import time
from unidecode import unidecode
+def slugify(value):
+ """
+ Return a slug
+ """
+ return django_slugify(unidecode(value or ""))
+
+
def slugify_uniquely(value, model, slugfield="slug"):
"""
Returns a slug on a name which is unique within a model's table
"""
suffix = 0
- potential = base = slugify(unidecode(value))
+ potential = base = django_slugify(unidecode(value))
if len(potential) == 0:
potential = 'null'
while True:
@@ -45,7 +52,7 @@ def slugify_uniquely_for_queryset(value, queryset, slugfield="slug"):
"""
suffix = 0
- potential = base = slugify(unidecode(value))
+ potential = base = django_slugify(unidecode(value))
if len(potential) == 0:
potential = 'null'
while True:
diff --git a/taiga/mdrender/extensions/wikilinks.py b/taiga/mdrender/extensions/wikilinks.py
index 9eedbbcf..b603e1cf 100644
--- a/taiga/mdrender/extensions/wikilinks.py
+++ b/taiga/mdrender/extensions/wikilinks.py
@@ -22,6 +22,7 @@ from markdown.treeprocessors import Treeprocessor
from markdown.util import etree
from taiga.front import resolve
+from taiga.base.utils.slug import slugify
import re
@@ -48,7 +49,7 @@ class WikiLinksPattern(Pattern):
def handleMatch(self, m):
label = m.group(2).strip()
- url = resolve("wiki", self.project.slug, label)
+ url = resolve("wiki", self.project.slug, slugify(label))
if m.group(3):
title = m.group(3).strip()[1:]
diff --git a/taiga/mdrender/service.py b/taiga/mdrender/service.py
index 9c7990b5..70d236a5 100644
--- a/taiga/mdrender/service.py
+++ b/taiga/mdrender/service.py
@@ -36,7 +36,6 @@ bleach._serialize = _serialize
from django.core.cache import cache
from django.utils.encoding import force_bytes
-from django.template.defaultfilters import slugify
from markdown import Markdown
@@ -101,9 +100,6 @@ def cache_by_sha(func):
def _get_markdown(project):
- def build_url(*args, **kwargs):
- return args[1] + slugify(args[0])
-
extensions = _make_extensions_list(project=project)
md = Markdown(extensions=extensions)
md.extracted_data = {"mentions": [], "references": []}
diff --git a/tests/unit/test_mdrender.py b/tests/unit/test_mdrender.py
index a31b749c..6e7002e0 100644
--- a/tests/unit/test_mdrender.py
+++ b/tests/unit/test_mdrender.py
@@ -101,6 +101,17 @@ 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
"
diff --git a/tests/unit/test_slug.py b/tests/unit/test_slug.py
index ea7dd17d..deb1961b 100644
--- a/tests/unit/test_slug.py
+++ b/tests/unit/test_slug.py
@@ -18,10 +18,24 @@
from taiga.projects.models import Project
from taiga.users.models import User
+from taiga.base.utils.slug import slugify
+
import pytest
pytestmark = pytest.mark.django_db
+def test_slugify_1():
+ assert slugify("漢字") == "han-zi"
+
+
+def test_slugify_2():
+ assert slugify("TestExamplePage") == "testexamplepage"
+
+
+def test_slugify_3():
+ assert slugify(None) == ""
+
+
def test_project_slug_with_special_chars():
user = User.objects.create(username="test")
project = Project.objects.create(name="漢字", description="漢字", owner=user)