File: test_session.py

package info (click to toggle)
odoo 18.0.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 878,716 kB
  • sloc: javascript: 927,937; python: 685,670; xml: 388,524; sh: 1,033; sql: 415; makefile: 26
file content (75 lines) | stat: -rw-r--r-- 3,371 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from lxml import html
from unittest.mock import patch

from odoo import http
import odoo.tests

from odoo.addons.base.tests.common import HttpCaseWithUserDemo


@odoo.tests.common.tagged('post_install', '-at_install')
class TestWebsiteSession(HttpCaseWithUserDemo):

    def test_01_run_test(self):
        self.start_tour('/', 'test_json_auth')

    def test_02_inactive_session_lang(self):
        session = self.authenticate(None, None)
        self.env.ref('base.lang_fr').active = False
        session.context['lang'] = 'fr_FR'
        odoo.http.root.session_store.save(session)

        # ensure that _get_current_website_id will be able to match a website
        current_website_id = self.env["website"]._get_current_website_id(odoo.tests.HOST)
        self.env["website"].browse(current_website_id).domain = odoo.tests.HOST

        res = self.url_open('/test_website_sitemap')  # any auth='public' route would do
        res.raise_for_status()

    def test_03_totp_login_with_inactive_session_lang(self):
        session = self.authenticate(None, None)
        self.env.ref('base.lang_fr').active = False
        session.context['lang'] = 'fr_FR'
        odoo.http.root.session_store.save(session)

        # ensure that _get_current_website_id will be able to match a website
        current_website_id = self.env["website"]._get_current_website_id(odoo.tests.HOST)
        self.env["website"].browse(current_website_id).domain = odoo.tests.HOST

        with patch.object(self.env.registry["res.users"], "_mfa_url", return_value="/web/login/totp"):
            res = self.url_open('/web/login', allow_redirects=False, data={
                'login': 'demo',
                'password': 'demo',
                'csrf_token': http.Request.csrf_token(self),
            })
            res.raise_for_status()
        self.assertEqual(res.status_code, 303)
        self.assertTrue(res.next.path_url.startswith("/web/login/totp"))

    def test_branding_cache(self):
        def has_branding(html_text):
            el = html.fromstring(html_text)
            return el.xpath('//*[@data-oe-model="test.model"]')

        self.user_demo.groups_id += self.env.ref('website.group_website_restricted_editor')
        self.user_demo.groups_id += self.env.ref('test_website.group_test_website_admin')
        self.user_demo.groups_id -= self.env.ref('website.group_website_designer')

        # Create session for demo user.
        public_session = self.authenticate(None, None)
        demo_session = self.authenticate('demo', 'demo')
        record = self.env['test.model'].search([])
        result = self.url_open(f'/test_website/model_item_sudo/{record.id}')
        self.assertTrue(has_branding(result.text), "Should have branding for user demo")

        # Public user.
        self.opener.cookies['session_id'] = public_session.sid
        result = self.url_open(f'/test_website/model_item_sudo/{record.id}')
        self.assertFalse(has_branding(result.text), "Should have no branding for public user")

        # Back to demo user.
        self.opener.cookies['session_id'] = demo_session.sid
        result = self.url_open(f'/test_website/model_item_sudo/{record.id}')
        self.assertTrue(has_branding(result.text), "Should have branding for user demo")