During checkout, the user can create a new billing (only for public user as it will create a 'normal' `res.partner`), a new shipping, edit its billing (that will edit himself) or edit its shipping address. All those cases will go through the exact same methods, public user and logged in user included. This previously led to multiple issues and multiple fixes to correctly set `company_id` and `website_id` on the address (res.partner). See44372471efthat fixed the `website_id` part. See3a0f05f33that fixed the multi-company behavior, but needed2ba71140to not modify the company of an already created partner, but was still incomplete as after that fix a logged in user would still have the admin (sudo) company instead of the website one as supposed. This commit will fix that bug and add some tests for all mentionned issues. Related to #28853 as we want to backport the mentionned commit but needed to be fix first. closes odoo/odoo#34596 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
# -*- encoding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import odoo
|
|
import werkzeug
|
|
|
|
from odoo.tools import DotDict
|
|
|
|
|
|
class MockObject(object):
|
|
_log_call = []
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.__dict__ = kwargs
|
|
|
|
def __call__(self, *args, **kwargs):
|
|
self._log_call.append((args, kwargs))
|
|
return self
|
|
|
|
def __getitem__(self, index):
|
|
return self
|
|
|
|
|
|
def werkzeugRaiseNotFound(*args, **kwargs):
|
|
raise werkzeug.exceptions.NotFound()
|
|
|
|
|
|
class MockRequest(object):
|
|
""" Class with context manager mocking odoo.http.request for tests """
|
|
def __init__(self, env, **kw):
|
|
app = MockObject(routing={
|
|
'type': 'http',
|
|
'website': True,
|
|
'multilang': kw.get('multilang', True),
|
|
})
|
|
app.get_db_router = app.bind = app.match = app
|
|
if not kw.get('routing', True):
|
|
app.match = werkzeugRaiseNotFound
|
|
self.request = DotDict({
|
|
'context': kw.get('context', {}),
|
|
'db': None,
|
|
'debug': False,
|
|
'env': env,
|
|
'httprequest': {
|
|
'path': '/hello/',
|
|
'app': app,
|
|
},
|
|
'redirect': werkzeug.utils.redirect,
|
|
'session': {
|
|
'geoip': {
|
|
'country_code': kw.get('country_code'),
|
|
},
|
|
'sale_order_id': kw.get('sale_order_id'),
|
|
},
|
|
'website': kw.get('website'),
|
|
})
|
|
odoo.http._request_stack.push(self.request)
|
|
|
|
def __enter__(self):
|
|
return self.request
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
odoo.http._request_stack.pop()
|