Odoo18-Base/addons/website/tests/test_converter.py
2025-01-06 10:57:38 +07:00

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' ?")
)