diff --git a/odoo/addons/test_http/tests/test_session.py b/odoo/addons/test_http/tests/test_session.py index f67967afe59..2737ca33dbd 100644 --- a/odoo/addons/test_http/tests/test_session.py +++ b/odoo/addons/test_http/tests/test_session.py @@ -1,5 +1,6 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. +from urllib.parse import urlparse from unittest.mock import patch import odoo @@ -74,3 +75,19 @@ class TestHttpSession(TestHttpBase): res.raise_for_status() self.assertEqual(res.text, str(GEOIP_ODOO_FARM_2)) mock_resolve.assert_called_once() + + def test_session3_logout_15_0_geoip(self): + session = self.authenticate(None, None) + session['db'] = 'idontexist' + session['geoip'] = {} # Until saas-15.2 geoip was directly stored in the session + odoo.http.root.session_store.save(session) + + with self.assertLogs('odoo.http', level='WARNING') as (_, warnings): + res = self.multidb_url_open('/test_http/ensure_db', dblist=['db1', 'db2']) + + self.assertEqual(warnings, [ + "WARNING:odoo.http:Logged into database 'idontexist', but dbfilter rejects it; logging session out.", + ]) + self.assertFalse(session['db']) + self.assertEqual(res.status_code, 303) + self.assertEqual(urlparse(res.headers['Location']).path, '/web/database/selector') diff --git a/odoo/http.py b/odoo/http.py index a887b28f969..ea093266d46 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -915,6 +915,10 @@ class Session(collections.abc.MutableMapping): else: self[key] = val + def clear(self): + self.data.clear() + self.is_dirty = True + # # Session methods #