Files
design-themes/test_themes/models/ir_http.py
T
Romain Derie ca449f01f8 [FIX] test_themes: force request's website before _frontend_pre_dispatch
The callstack is:
- _pre_dispatch() (http_routing)
  - super()
  - _frontend_pre_dispatch()
    - super()
      - _frontend_pre_dispatch() (website) -> Set the website on request

But in `test_themes` we were forcing the website in a `_pre_dispatch()`
override, after calling `super()`.
It means that the call to `_frontend_pre_dispatch()` was actually done
without having yet forced the website in session. get_current_website()
would then not consider the `fw` param as not yet in session, and the
request.website would be set to 1, the default one.
Later in the business code, there would be a mismatch between
`request.website` and `get_current_website()`.

closes odoo/design-themes#582

Related: odoo/odoo#98200
Related: odoo/enterprise#30691
Related: odoo/upgrade#3808
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2022-08-31 23:50:15 +02:00

19 lines
639 B
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, tools
from odoo.http import request
class Http(models.AbstractModel):
_inherit = 'ir.http'
@classmethod
def _pre_dispatch(cls, rule, args):
# Allow public user to use `fw` query string in test mode to ease tests
force_website_id = request.httprequest.args.get('fw')
if (request.registry.in_test_mode() or tools.config.options['test_enable']) and force_website_id:
request.env['website']._force_website(force_website_id)
super()._pre_dispatch(rule, args)