website_links/tests/test_controller.py

69 lines
2.8 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from urllib.parse import urlparse
from odoo.tests import tagged
from odoo.tests.common import HttpCase
@tagged('post_install', '-at_install')
class TestWebsiteLinksRussian(HttpCase):
"""
The /r URL prefix is considered as an alias to /ru by the "nearest
lang" algorithm of our http router (http_routing match). This test
suite makes sure that there the link-tracker "/r" controller is not
affected by any (wrong) /ru redirection.
"""
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.link = cls.env['link.tracker'].create({
'url': cls.base_url() + '/web/health', # no-op route
})
# Courtesy of website/tests/test_lang_url.py
website = cls.env.ref('website.default_website')
lang_en = cls.env.ref('base.lang_en')
lang_ru = cls.env['res.lang']._activate_lang('ru_RU')
website.language_ids = lang_en + lang_ru
website.default_lang_id = lang_en
def test0_direct_link_tracker(self):
res = self.url_open(f'/r/{self.link.code}', allow_redirects=False)
res.raise_for_status()
self.assertEqual(res.status_code, 301, "Should be link-tracking redirection")
self.assertEqual(res.headers.get('Location'), self.link.url,
"Should not be redirected to /ru")
def test1_russian_link_tracker(self):
res = self.url_open(f'/r/r/{self.link.code}', allow_redirects=False)
res.raise_for_status()
self.assertEqual(res.status_code, 301, "Should be a lang alias redirection")
self.assertEqual(urlparse(res.headers.get('Location'), '').path, f'/ru/r/{self.link.code}',
"Should be redirected to /ru as r is an alias for ru (russian)")
res = self.url_open(res.headers['Location'], allow_redirects=False)
res.raise_for_status()
self.assertEqual(res.status_code, 301, "Should be a link-tracking redirection")
self.assertEqual(res.headers.get('Location'), self.link.url,
"Should not be redirected to /ru")
def test2_russian_page(self):
# This generate a new unused link
no_link_code = self.env['link.tracker.code']._get_random_code_strings()[0]
view = self.env['ir.ui.view'].create({
'name': 'Base',
'type': 'qweb',
'arch': '<div>Welcome to this webpage!</div>',
'key': 'test.base_view',
})
self.env['website.page'].create({
'url': f'/{no_link_code}',
'view_id': view.id,
'website_published': True,
})
res = self.url_open(f'/r/{no_link_code}', allow_redirects=False)
self.assertEqual(res.status_code, 404, "No link tracker exists for the requested code")