When running test tours logging a message to console.error causes the test tour to fail. Only one such message can cause the tour to fail, if other message are written on the console they are simply logged in the odoo logs. The offending message, however, is only shown at the end of run, as part of the failing test logs. Arguably, it is better to include it in the browser logs as well. closes odoo/odoo#75197 Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
52 lines
2.5 KiB
Python
52 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.tests.common import HttpCase, tagged
|
|
from odoo.tools import mute_logger, logging
|
|
from unittest.mock import patch
|
|
|
|
@tagged('-at_install', 'post_install')
|
|
class TestHttpCase(HttpCase):
|
|
|
|
def test_console_error_string(self):
|
|
with self.assertLogs(level='ERROR') as log_catcher:
|
|
with self.assertRaises(AssertionError) as error_catcher:
|
|
code = "console.error('test error','message')"
|
|
with patch('odoo.tests.common.ChromeBrowser.take_screenshot', return_value=None):
|
|
self.browser_js(url_path='about:blank', code=code)
|
|
# second line must contains error message
|
|
self.assertEqual(error_catcher.exception.args[0].splitlines()[1], "test error message")
|
|
self.assertEqual(len(log_catcher.output), 1)
|
|
self.assertIn('test error message', log_catcher.output[0])
|
|
|
|
def test_console_error_object(self):
|
|
with self.assertLogs(level='ERROR') as log_catcher:
|
|
with self.assertRaises(AssertionError) as error_catcher:
|
|
code = "console.error(TypeError('test error message'))"
|
|
with patch('odoo.tests.common.ChromeBrowser.take_screenshot', return_value=None):
|
|
self.browser_js(url_path='about:blank', code=code)
|
|
# second line must contains error message
|
|
self.assertEqual(error_catcher.exception.args[0].splitlines()[1:3],
|
|
['TypeError: test error message', ' at <anonymous>:1:15'])
|
|
self.assertEqual(len(log_catcher.output), 1)
|
|
self.assertIn('TypeError: test error message\n at <anonymous>:1:15', log_catcher.output[0])
|
|
|
|
def test_console_log_object(self):
|
|
logger = logging.getLogger('odoo')
|
|
level = logger.level
|
|
logger.setLevel(logging.INFO)
|
|
self.addCleanup(logger.setLevel, level)
|
|
|
|
with self.assertLogs() as log_catcher:
|
|
code = "console.log({custom:{1:'test', 2:'a'}, value:1, description:'dummy'});console.log('test successful');"
|
|
self.browser_js(url_path='about:blank', code=code)
|
|
console_log_count = 0
|
|
for log in log_catcher.output:
|
|
if '.browser:' in log:
|
|
text = log.split('.browser:', 1)[1]
|
|
if text == 'test successful':
|
|
continue
|
|
self.assertEqual(text, "Object(custom=Object, value=1, description='dummy')")
|
|
console_log_count +=1
|
|
self.assertEqual(console_log_count, 1)
|