cubicweb/web/test/unittest_request.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 17 Nov 2016 10:15:11 +0100
branch3.24
changeset 11825 52acf0dbf4cd
parent 11799 1bdfe9d4ab83
child 11913 4516c3956d46
permissions -rw-r--r--
[web] Simplify a bit language handling Drop `set_default_language` and `set_user_language` by considering that: * before being bound to the user, request will have the site's default language * cnx has the user's preferred language, hence get it back to the request when it's bound to a connection The first point requires some change to cubicweb's vreg faking so it doesn't break. That should be enough.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
"""misc. unittests for utility functions
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     2
"""
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     3
11798
55f678f128ef [test] Use stdlib unittest instead of lgc.testlib in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11797
diff changeset
     4
import unittest
55f678f128ef [test] Use stdlib unittest instead of lgc.testlib in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11797
diff changeset
     5
from functools import partial
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     6
11799
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
     7
from six import text_type
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     8
11825
52acf0dbf4cd [web] Simplify a bit language handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11799
diff changeset
     9
from cubicweb.devtools.fake import FakeConfig, FakeCWRegistryStore
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    10
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    11
from cubicweb.web.request import (CubicWebRequestBase, _parse_accept_header,
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    12
                                  _mimetype_sort_key, _mimetype_parser, _charset_sort_key)
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    13
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    14
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    15
11798
55f678f128ef [test] Use stdlib unittest instead of lgc.testlib in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11797
diff changeset
    16
class AcceptParserTC(unittest.TestCase):
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    17
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
    def test_parse_accept(self):
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
        parse_accept_header = partial(_parse_accept_header,
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
                                      value_parser=_mimetype_parser,
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
                                      value_sort_key=_mimetype_sort_key)
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
        # compare scores
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
        self.assertEqual(parse_accept_header("audio/*;q=0.2, audio/basic"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
                         [( ('audio/basic', ('audio', 'basic', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
                          ( ('audio/*', ('audio', '*', {}), 0.2 ) )])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
        self.assertEqual(parse_accept_header("text/plain;q=0.5, text/html, text/x-dvi;q=0.8, text/x-c"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
                         [( ('text/html', ('text', 'html', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
                          ( ('text/x-c', ('text', 'x-c', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
                          ( ('text/x-dvi', ('text', 'x-dvi', {}), 0.8 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
                          ( ('text/plain', ('text', 'plain', {}), 0.5 ) )])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
        # compare mimetype precedence for a same given score
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
        self.assertEqual(parse_accept_header("audio/*, audio/basic"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
                         [( ('audio/basic', ('audio', 'basic', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
                          ( ('audio/*', ('audio', '*', {}), 1.0 ) )])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
        self.assertEqual(parse_accept_header("text/*, text/html, text/html;level=1, */*"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
                         [( ('text/html', ('text', 'html', {'level': '1'}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
                          ( ('text/html', ('text', 'html', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
                          ( ('text/*', ('text', '*', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
                          ( ('*/*', ('*', '*', {}), 1.0 ) )])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
        # free party
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
        self.assertEqual(parse_accept_header("text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
                         [( ('text/html', ('text', 'html', {'level': '1'}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
                          ( ('text/html', ('text', 'html', {}), 0.7 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
                          ( ('*/*', ('*', '*', {}), 0.5 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
                          ( ('text/html', ('text', 'html', {'level': '2'}), 0.4 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
                          ( ('text/*', ('text', '*', {}), 0.3 ) )
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
                          ])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
        # chrome sample header
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
        self.assertEqual(parse_accept_header("application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
                         [( ('application/xhtml+xml', ('application', 'xhtml+xml', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
                          ( ('application/xml', ('application', 'xml', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
                          ( ('image/png', ('image', 'png', {}), 1.0 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
                          ( ('text/html', ('text', 'html', {}), 0.9 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
                          ( ('text/plain', ('text', 'plain', {}), 0.8 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
                          ( ('*/*', ('*', '*', {}), 0.5 ) ),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
                          ])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
    def test_parse_accept_language(self):
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
        self.assertEqual(_parse_accept_header('fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
                         [('fr', 'fr', 1.0), ('fr-fr', 'fr-fr', 0.8),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
                          ('en-us', 'en-us', 0.5), ('en', 'en', 0.3)])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
    def test_parse_accept_charset(self):
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
        parse_accept_header = partial(_parse_accept_header,
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
                                      value_sort_key=_charset_sort_key)
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
        self.assertEqual(parse_accept_header('ISO-8859-1,utf-8;q=0.7,*;q=0.7'),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
                         [('ISO-8859-1', 'ISO-8859-1', 1.0),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
                          ('utf-8', 'utf-8', 0.7),
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
                          ('*', '*', 0.7)])
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
11797
6c036ac4c1c2 [test] Distinguish "request" tests from accept parser ones in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11794
diff changeset
    71
11798
55f678f128ef [test] Use stdlib unittest instead of lgc.testlib in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11797
diff changeset
    72
class WebRequestTC(unittest.TestCase):
11797
6c036ac4c1c2 [test] Distinguish "request" tests from accept parser ones in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11794
diff changeset
    73
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    74
    def test_base_url(self):
11825
52acf0dbf4cd [web] Simplify a bit language handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11799
diff changeset
    75
        dummy_vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    76
        dummy_vreg.config['base-url'] = 'http://babar.com/'
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    77
        dummy_vreg.config['https-url'] = 'https://toto.com/'
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    78
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    79
        req = CubicWebRequestBase(dummy_vreg, https=False)
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    80
        self.assertEqual('http://babar.com/', req.base_url())
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    81
        self.assertEqual('http://babar.com/', req.base_url(False))
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    82
        self.assertEqual('https://toto.com/', req.base_url(True))
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    83
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    84
        req = CubicWebRequestBase(dummy_vreg, https=True)
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    85
        self.assertEqual('https://toto.com/', req.base_url())
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    86
        self.assertEqual('http://babar.com/', req.base_url(False))
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    87
        self.assertEqual('https://toto.com/', req.base_url(True))
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    88
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    89
    def test_negotiated_language(self):
11825
52acf0dbf4cd [web] Simplify a bit language handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11799
diff changeset
    90
        vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    91
        vreg.config.translations = {'fr': (None, None), 'en': (None, None)}
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    92
        headers = {
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    93
            'Accept-Language': 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3',
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    94
        }
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    95
        req = CubicWebRequestBase(vreg, https=False, headers=headers)
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    96
        self.assertEqual(req.negotiated_language(), 'fr')
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
    97
11799
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
    98
    def test_build_url_language_from_url(self):
11825
52acf0dbf4cd [web] Simplify a bit language handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11799
diff changeset
    99
        vreg = FakeCWRegistryStore(FakeConfig(), initlog=False)
11799
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   100
        vreg.config['base-url'] = 'http://testing.fr/cubicweb/'
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   101
        vreg.config['language-mode'] = 'url-prefix'
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   102
        vreg.config.translations['fr'] = text_type, text_type
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   103
        req = CubicWebRequestBase(vreg, https=False)
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   104
        # Override from_controller to avoid getting into relative_path method,
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   105
        # which is not implemented in CubicWebRequestBase.
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   106
        req.from_controller = lambda : 'not view'
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   107
        self.assertEqual(req.lang, 'en')  # site's default language
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   108
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/en/view')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   109
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/en/foo')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   110
        req.set_language('fr')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   111
        self.assertEqual(req.lang, 'fr')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   112
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/fr/view')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   113
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/fr/foo')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   114
        # no language prefix in URL
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   115
        vreg.config['language-mode'] = ''
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   116
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/view')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   117
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/foo')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   118
        req.set_language('fr')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   119
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/view')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   120
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/foo')
1bdfe9d4ab83 [req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11798
diff changeset
   121
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 7164
diff changeset
   122
7164
93a19c1831aa [http] implement 1587305: provide better implementation of Accept header parsing + tests
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
if __name__ == '__main__':
11798
55f678f128ef [test] Use stdlib unittest instead of lgc.testlib in unittest_request.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11797
diff changeset
   124
    unittest.main()