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 <chs@odoo.com>
32 lines
1.4 KiB
Python
32 lines
1.4 KiB
Python
# 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'}})
|