From 521f7d36c1ff929ea52e9ed6fd4170bd3b968b19 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Fri, 7 Jun 2019 06:22:41 +0000 Subject: [IMP] odoo: ignore unsupported args from controller Before this commit, call a controller defined as: ``` @http.route('/route', type='http', auth='public') def controller_func(self, foo): do_it() ``` and called with url like /route?foo=1&bar=2 will crash with an exception: `TypeError: controller_func() got an unexpected keyword argument 'bar'` Now, we remove the extra parameters if the controller doesn't support it. This case is not uncommon, you can easily arrive in this case with utm or debug as extra parameter. closes odoo/odoo#33962 Signed-off-by: Christophe Simonis --- addons/test_website/tests/test_controller_args.py | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 addons/test_website/tests/test_controller_args.py (limited to 'addons/test_website/tests/test_controller_args.py') diff --git a/addons/test_website/tests/test_controller_args.py b/addons/test_website/tests/test_controller_args.py new file mode 100644 index 00000000000..4204cb1e5b4 --- /dev/null +++ b/addons/test_website/tests/test_controller_args.py @@ -0,0 +1,31 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. +import odoo.tests + + +@odoo.tests.common.tagged('post_install', '-at_install') +class TestWebsiteControllerArgs(odoo.tests.HttpCase): + + def test_crawl_args(self): + req = self.url_open('/ignore_args/converter/valueA/?b=valueB&c=valueC') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': 'valueA', 'b': 'valueB', 'kw': {'c': 'valueC'}}) + + req = self.url_open('/ignore_args/converter/valueA/nokw?b=valueB&c=valueC') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': 'valueA', 'b': 'valueB'}) + + req = self.url_open('/ignore_args/converteronly/valueA/?b=valueB&c=valueC') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': 'valueA', 'kw': None}) + + req = self.url_open('/ignore_args/none?a=valueA&b=valueB') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': None, 'kw': None}) + + req = self.url_open('/ignore_args/a?a=valueA&b=valueB') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': 'valueA', 'kw': None}) + + req = self.url_open('/ignore_args/kw?a=valueA&b=valueB') + self.assertEquals(req.status_code, 200) + self.assertEquals(req.json(), {'a': 'valueA', 'kw': {'b': 'valueB'}}) -- cgit v1.2.3