108 lines
2.8 KiB
Python
108 lines
2.8 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
import threading
|
|
|
|
from odoo.tests.common import BaseCase
|
|
from odoo.modules.registry import Registry
|
|
|
|
|
|
class TestSlugUnslug(BaseCase):
|
|
|
|
def test_unslug(self):
|
|
tests = {
|
|
'': (None, None),
|
|
'foo': (None, None),
|
|
'foo-': (None, None),
|
|
'-': (None, None),
|
|
'foo-1': ('foo', 1),
|
|
'foo-bar-1': ('foo-bar', 1),
|
|
'foo--1': ('foo', -1),
|
|
'1': (None, 1),
|
|
'1-1': ('1', 1),
|
|
'--1': (None, None),
|
|
'foo---1': (None, None),
|
|
'foo1': (None, None),
|
|
# qs & anchor & trailing slash
|
|
'foo-1/': ('foo', 1),
|
|
'foo-1/?qs=1': ('foo', 1),
|
|
'foo-1/#anchor': ('foo', 1),
|
|
'foo-1?qs=1': ('foo', 1),
|
|
'foo-1#anchor': ('foo', 1),
|
|
}
|
|
|
|
unslug = Registry(threading.current_thread().dbname)['ir.http']._unslug
|
|
|
|
for slug, expected in tests.items():
|
|
self.assertEqual(unslug(slug), expected, "%r case failed" % slug)
|
|
|
|
def test_slug(self):
|
|
tests = {
|
|
'foo-1': (1, 'foo'),
|
|
'foo-bar-1': (1, 'foo-bar'),
|
|
'foo--1': (-1, 'foo'),
|
|
'1-2': (2, '1'),
|
|
}
|
|
|
|
slug = Registry(threading.current_thread().dbname)['ir.http']._slug
|
|
|
|
for expected, value in tests.items():
|
|
self.assertEqual(slug(value), expected, "%r case failed" % (value,))
|
|
|
|
|
|
class TestTitleToSlug(BaseCase):
|
|
"""
|
|
Those tests should pass with or without python-slugify
|
|
See website/models/website.py slugify method
|
|
"""
|
|
|
|
def _slugify(self, value):
|
|
_slugify = Registry(threading.current_thread().dbname)['ir.http']._slugify
|
|
return _slugify(value)
|
|
|
|
def test_spaces(self):
|
|
self.assertEqual(
|
|
"spaces",
|
|
self._slugify(" spaces ")
|
|
)
|
|
|
|
def test_unicode(self):
|
|
self.assertEqual(
|
|
"heterogeneite",
|
|
self._slugify("hétérogénéité")
|
|
)
|
|
|
|
def test_underscore(self):
|
|
self.assertEqual(
|
|
"one-two",
|
|
self._slugify("one_two")
|
|
)
|
|
|
|
def test_caps(self):
|
|
self.assertEqual(
|
|
"camelcase",
|
|
self._slugify("CamelCase")
|
|
)
|
|
|
|
def test_special_chars(self):
|
|
self.assertEqual(
|
|
"o-d-o-o",
|
|
self._slugify(r"o!#d{|\o/@~o&%^?")
|
|
)
|
|
|
|
def test_str_to_unicode(self):
|
|
self.assertEqual(
|
|
"espana",
|
|
self._slugify("España")
|
|
)
|
|
|
|
def test_numbers(self):
|
|
self.assertEqual(
|
|
"article-1",
|
|
self._slugify("Article 1")
|
|
)
|
|
|
|
def test_all(self):
|
|
self.assertEqual(
|
|
"do-you-know-martine-a-la-plage",
|
|
self._slugify("Do YOU know 'Martine à la plage' ?")
|
|
)
|