123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import json
- from unittest.mock import patch
- from odoo.tools import config, mute_logger
- from odoo.addons.test_http.controllers import CT_JSON
- from .test_common import TestHttpBase
- class TestHttpErrorHttp(TestHttpBase):
- @mute_logger('odoo.http') # UserError("Walter is AFK")
- def test_httperror0_exceptions_as_404(self):
- with self.subTest('Decorator/AccessError'):
- res = self.nodb_url_open('/test_http/hide_errors/decorator?error=AccessError')
- self.assertEqual(res.status_code, 404, "AccessError are configured to be hidden, they should be re-thrown as NotFound")
- self.assertNotIn("Wrong iris code", res.text, "The real AccessError message should be hidden.")
- with self.subTest('Decorator/UserError'):
- res = self.nodb_url_open('/test_http/hide_errors/decorator?error=UserError')
- self.assertEqual(res.status_code, 400, "UserError are not configured to be hidden, they should be kept as-is.")
- self.assertIn("Walter is AFK", res.text, "The real UserError message should be kept")
- with self.subTest('Context-Manager/AccessError'):
- res = self.nodb_url_open('/test_http/hide_errors/context-manager?error=AccessError')
- self.assertEqual(res.status_code, 404, "AccessError are configured to be hidden, they should be re-thrown as NotFound")
- self.assertNotIn("Wrong iris code", res.text, "The real AccessError message should be hidden.")
- with self.subTest('Context-Manager/UserError'):
- res = self.nodb_url_open('/test_http/hide_errors/context-manager?error=UserError')
- self.assertEqual(res.status_code, 400, "UserError are not configured to be hidden, they should be kept as-is.")
- self.assertIn("Walter is AFK", res.text, "The real UserError message should be kept")
- class TestHttpJsonError(TestHttpBase):
- jsonrpc_error_structure = {
- 'error': {
- 'code': ...,
- 'data': {
- 'arguments': ...,
- 'context': ...,
- 'debug': ...,
- 'message': ...,
- 'name': ...,
- },
- 'message': ...,
- },
- 'id': ...,
- 'jsonrpc': ...,
- }
- def assertIsErrorPayload(self, payload):
- self.assertEqual(
- set(payload),
- set(self.jsonrpc_error_structure),
- )
- self.assertEqual(
- set(payload['error']),
- set(self.jsonrpc_error_structure['error']),
- )
- self.assertEqual(
- set(payload['error']['data']),
- set(self.jsonrpc_error_structure['error']['data']),
- )
- @mute_logger('odoo.http')
- def test_errorjson0_value_error(self):
- res = self.db_url_open('/test_http/json_value_error',
- data=json.dumps({'jsonrpc': '2.0', 'id': 1234, 'params': {}}),
- headers=CT_JSON
- )
- res.raise_for_status()
- self.assertEqual(res.status_code, 200)
- self.assertEqual(res.headers.get('Content-Type', ''), 'application/json; charset=utf-8')
- payload = res.json()
- self.assertIsErrorPayload(payload)
- error_data = payload['error']['data']
- self.assertEqual(error_data['name'], 'builtins.ValueError')
- self.assertEqual(error_data['message'], 'Unknown destination')
- self.assertEqual(error_data['arguments'], ['Unknown destination'])
- self.assertEqual(error_data['context'], {})
|