Small fixes

This commit is contained in:
Daniel Martin 2021-02-02 09:28:20 +00:00 committed by Tim Bentley
parent ec6015c7fb
commit 058bea7f4c
4 changed files with 144 additions and 84 deletions

View File

@ -177,7 +177,10 @@ class DisplayWindow(QtWidgets.QWidget, RegistryProperties, LogMixin):
image = self.settings.value('core/logo file') image = self.settings.value('core/logo file')
if path_to_str(image).startswith(':'): if path_to_str(image).startswith(':'):
image = self.openlp_splash_screen_path image = self.openlp_splash_screen_path
image_uri = image.as_uri() try:
image_uri = image.as_uri()
except Exception:
image_uri = ''
# if set to hide logo on startup, do not send the logo # if set to hide logo on startup, do not send the logo
if self.settings.value('core/logo hide on startup'): if self.settings.value('core/logo hide on startup'):
image_uri = '' image_uri = ''

View File

@ -910,12 +910,12 @@ class ServiceItem(RegistryProperties):
item['chords'] = self.rendered_slides[index]['chords'] item['chords'] = self.rendered_slides[index]['chords']
item['footer'] = self.rendered_slides[index]['footer'] item['footer'] = self.rendered_slides[index]['footer']
elif self.is_image() and not frame.get('image', '') and \ elif self.is_image() and not frame.get('image', '') and \
Registry().get('settings_thread').value('api/thumbnails'): Registry().get('settings_thread').value('api/thumbnails') and \
thumbnail_path = os.path.join('images', 'thumbnails', frame['title']) self.is_capable(ItemCapabilities.HasThumbnails):
full_thumbnail_path = AppLocation.get_data_path() / thumbnail_path thumbnail_path = frame['thumbnail']
if not full_thumbnail_path.exists(): if not thumbnail_path.exists():
create_thumb(Path(self.get_frame_path(index)), full_thumbnail_path, False) create_thumb(Path(self.get_frame_path(index)), thumbnail_path, False)
item['img'] = image_to_data_uri(full_thumbnail_path) item['img'] = image_to_data_uri(thumbnail_path)
item['text'] = str(frame['title']) item['text'] = str(frame['title'])
item['html'] = str(frame['title']) item['html'] = str(frame['title'])
else: else:

View File

@ -24,6 +24,7 @@ Package to test the openlp.core.display.window package.
import sys import sys
import time import time
import pytest import pytest
from pathlib import Path
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
@ -50,9 +51,18 @@ def mock_geometry():
screenlist_patcher.stop() screenlist_patcher.stop()
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') @pytest.fixture
@patch('openlp.core.display.webengine.WebEngineView') def display_window_env():
def test_x11_override_on(mocked_webengine, mocked_addWidget, mock_settings): box_layout_patcher = patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
web_view_patcher = patch('openlp.core.display.webengine.WebEngineView')
box_layout_patcher.start()
web_view_patcher.start()
yield
box_layout_patcher.stop()
web_view_patcher.stop()
def test_x11_override_on(display_window_env, mock_settings):
""" """
Test that the x11 override option bit is set Test that the x11 override option bit is set
""" """
@ -67,9 +77,7 @@ def test_x11_override_on(mocked_webengine, mocked_addWidget, mock_settings):
assert x11_bit == QtCore.Qt.X11BypassWindowManagerHint assert x11_bit == QtCore.Qt.X11BypassWindowManagerHint
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_x11_override_off(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_x11_override_off(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test that the x11 override option bit is not set when setting if off Test that the x11 override option bit is not set when setting if off
""" """
@ -84,8 +92,7 @@ def test_x11_override_off(mocked_webengine, mocked_addWidget, mock_settings):
assert x11_bit != QtCore.Qt.X11BypassWindowManagerHint assert x11_bit != QtCore.Qt.X11BypassWindowManagerHint
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_scale_not_initialised(display_window_env, mock_settings):
def test_set_scale_not_initialised(mocked_addWidget, mock_settings):
""" """
Test that the scale js is not run if the page is not initialised Test that the scale js is not run if the page is not initialised
""" """
@ -101,13 +108,11 @@ def test_set_scale_not_initialised(mocked_addWidget, mock_settings):
display_window.run_javascript.assert_not_called() display_window.run_javascript.assert_not_called()
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_scale_initialised(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_set_scale_initialised(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test that the scale js is not run if the page is not initialised Test that the scale js is run if the page is initialised
""" """
# GIVEN: A display window not yet initialised # GIVEN: A initialised display window
display_window = DisplayWindow() display_window = DisplayWindow()
display_window._is_initialised = True display_window._is_initialised = True
display_window.run_javascript = MagicMock() display_window.run_javascript = MagicMock()
@ -119,9 +124,103 @@ def test_set_scale_initialised(mocked_webengine, mocked_addWidget, mock_settings
display_window.run_javascript.assert_called_once_with('Display.setScale(50.0);') display_window.run_javascript.assert_called_once_with('Display.setScale(50.0);')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_startup_screen(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView') """
def test_after_loaded(mocked_webengine, mocked_addWidget, mock_settings): Test that the startup screen get set correctly
"""
# GIVEN: A display window and mocked settings with logo path
display_window = DisplayWindow()
display_window._is_initialised = True
display_window.run_javascript = MagicMock()
display_window.openlp_splash_screen_path = Path('/default/splash_screen.png')
settings = {
'core/logo background color': 'red',
'core/logo file': Path('/my/image.png'),
'core/logo hide on startup': False
}
mock_settings.value.side_effect = lambda key: settings[key]
# WHEN: set_startup_screen is run
display_window.set_startup_screen()
# THEN: javascript should be run
display_window.run_javascript.assert_called_once_with(
'Display.setStartupSplashScreen("red", "file:///my/image.png");')
def test_set_startup_screen_default_image(display_window_env, mock_settings):
"""
Test that the startup screen get set correctly
"""
# GIVEN: A display window and mocked settings with logo path
display_window = DisplayWindow()
display_window._is_initialised = True
display_window.run_javascript = MagicMock()
display_window.openlp_splash_screen_path = Path('/default/splash_screen.png')
settings = {
'core/logo background color': 'blue',
'core/logo file': Path(':/graphics/openlp-splash-screen.png'),
'core/logo hide on startup': False
}
mock_settings.value.side_effect = lambda key: settings[key]
# WHEN: set_startup_screen is run
display_window.set_startup_screen()
# THEN: javascript should be run
display_window.run_javascript.assert_called_with(
'Display.setStartupSplashScreen("blue", "file:///default/splash_screen.png");')
def test_set_startup_screen_missing(display_window_env, mock_settings):
"""
Test that the startup screen get set correctly
"""
# GIVEN: A display window and mocked settings with logo path missing
display_window = DisplayWindow()
display_window._is_initialised = True
display_window.run_javascript = MagicMock()
display_window.openlp_splash_screen_path = Path('/default/splash_screen.png')
settings = {
'core/logo background color': 'green',
'core/logo file': None,
'core/logo hide on startup': False
}
mock_settings.value.side_effect = lambda key: settings[key]
# WHEN: set_startup_screen is run
display_window.set_startup_screen()
# THEN: javascript should be run
display_window.run_javascript.assert_called_with(
'Display.setStartupSplashScreen("green", "");')
def test_set_startup_screen_hide(display_window_env, mock_settings):
"""
Test that the startup screen get set correctly
"""
# GIVEN: A display window and mocked settings with hide logo true
display_window = DisplayWindow()
display_window._is_initialised = True
display_window.run_javascript = MagicMock()
display_window.openlp_splash_screen_path = Path('/default/splash_screen.png')
settings = {
'core/logo background color': 'orange',
'core/logo file': Path('/my/image.png'),
'core/logo hide on startup': True
}
mock_settings.value.side_effect = lambda key: settings[key]
# WHEN: set_startup_screen is run
display_window.set_startup_screen()
# THEN: javascript should be run
display_window.run_javascript.assert_called_once_with(
'Display.setStartupSplashScreen("orange", "");')
def test_after_loaded(display_window_env, mock_settings):
""" """
Test the correct steps are taken when the webview is loaded Test the correct steps are taken when the webview is loaded
""" """
@ -148,9 +247,7 @@ def test_after_loaded(mocked_webengine, mocked_addWidget, mock_settings):
display_window.set_startup_screen.assert_called_once() display_window.set_startup_screen.assert_called_once()
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_after_loaded_hide_mouse_not_display(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_after_loaded_hide_mouse_not_display(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test the mouse is showing even if the `hide mouse` setting is set while is_display=false Test the mouse is showing even if the `hide mouse` setting is set while is_display=false
""" """
@ -175,10 +272,8 @@ def test_after_loaded_hide_mouse_not_display(mocked_webengine, mocked_addWidget,
'});') '});')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch.object(time, 'time') @patch.object(time, 'time')
def test_run_javascript_no_sync_no_wait(mock_time, mocked_webengine, mocked_addWidget, mock_settings): def test_run_javascript_no_sync_no_wait(mock_time, display_window_env, mock_settings):
""" """
test a script is run on the webview test a script is run on the webview
""" """
@ -195,10 +290,8 @@ def test_run_javascript_no_sync_no_wait(mock_time, mocked_webengine, mocked_addW
mock_time.sleep.assert_not_called() mock_time.sleep.assert_not_called()
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch.object(time, 'time') @patch.object(time, 'time')
def test_run_javascript_sync_no_wait(mock_time, mocked_webengine, mocked_addWidget, mock_settings): def test_run_javascript_sync_no_wait(mock_time, display_window_env, mock_settings):
""" """
test a synced script is run on the webview and immediately returns a result test a synced script is run on the webview and immediately returns a result
""" """
@ -220,10 +313,8 @@ def test_run_javascript_sync_no_wait(mock_time, mocked_webengine, mocked_addWidg
mock_time.sleep.assert_not_called() mock_time.sleep.assert_not_called()
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.is_win') @patch('openlp.core.display.window.is_win')
def test_fix_font_bold_windows(mocked_is_win, mocked_webengine, mocked_layout, mock_settings): def test_fix_font_bold_windows(mocked_is_win, display_window_env, mock_settings):
""" """
Test that on Windows, fonts that end with "Bold" are handled Test that on Windows, fonts that end with "Bold" are handled
""" """
@ -241,10 +332,8 @@ def test_fix_font_bold_windows(mocked_is_win, mocked_webengine, mocked_layout, m
assert result == 'Arial Rounded MT' assert result == 'Arial Rounded MT'
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.is_win') @patch('openlp.core.display.window.is_win')
def test_fix_font_bold_not_windows(mocked_is_win, mocked_webengine, mocked_layout, mock_settings): def test_fix_font_bold_not_windows(mocked_is_win, display_window_env, mock_settings):
""" """
Test that on NOT Windows, fonts that end with "Bold" are ignored Test that on NOT Windows, fonts that end with "Bold" are ignored
""" """
@ -262,10 +351,8 @@ def test_fix_font_bold_not_windows(mocked_is_win, mocked_webengine, mocked_layou
assert result == 'Arial Rounded MT Bold' assert result == 'Arial Rounded MT Bold'
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.is_win') @patch('openlp.core.display.window.is_win')
def test_fix_font_foundry(mocked_is_win, mocked_webengine, mocked_layout, mock_settings): def test_fix_font_foundry(mocked_is_win, display_window_env, mock_settings):
""" """
Test that a font with a foundry name in it has the foundry removed Test that a font with a foundry name in it has the foundry removed
""" """
@ -283,9 +370,7 @@ def test_fix_font_foundry(mocked_is_win, mocked_webengine, mocked_layout, mock_s
assert result == 'CMG Sans' assert result == 'CMG Sans'
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_theme_is_display_video(display_window_env, mock_settings, mock_geometry):
@patch('openlp.core.display.webengine.WebEngineView')
def test_set_theme_is_display_video(mocked_webengine, mocked_addWidget, mock_settings, mock_geometry):
""" """
Test the set_theme function Test the set_theme function
""" """
@ -307,9 +392,7 @@ def test_set_theme_is_display_video(mocked_webengine, mocked_addWidget, mock_set
is_sync=False) is_sync=False)
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_theme_not_display_video(display_window_env, mock_settings, mock_geometry):
@patch('openlp.core.display.webengine.WebEngineView')
def test_set_theme_not_display_video(mocked_webengine, mocked_addWidget, mock_settings, mock_geometry):
""" """
Test the set_theme function Test the set_theme function
""" """
@ -338,9 +421,7 @@ def test_set_theme_not_display_video(mocked_webengine, mocked_addWidget, mock_se
is_sync=False) is_sync=False)
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_set_theme_not_display_live(display_window_env, mock_settings, mock_geometry):
@patch('openlp.core.display.webengine.WebEngineView')
def test_set_theme_not_display_live(mocked_webengine, mocked_addWidget, mock_settings, mock_geometry):
""" """
Test the set_theme function Test the set_theme function
""" """
@ -366,11 +447,9 @@ def test_set_theme_not_display_live(mocked_webengine, mocked_addWidget, mock_set
is_sync=False) is_sync=False)
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.Registry.execute') @patch('openlp.core.display.window.Registry.execute')
@patch('openlp.core.display.window.ScreenList') @patch('openlp.core.display.window.ScreenList')
def test_show_display(mocked_screenlist, mocked_registry_execute, mocked_webengine, mocked_addWidget, mock_settings): def test_show_display(mocked_screenlist, mocked_registry_execute, display_window_env, mock_settings):
""" """
Test show_display function Test show_display function
""" """
@ -391,10 +470,8 @@ def test_show_display(mocked_screenlist, mocked_registry_execute, mocked_webengi
mocked_registry_execute.assert_called_once_with('live_display_active') mocked_registry_execute.assert_called_once_with('live_display_active')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.ScreenList') @patch('openlp.core.display.window.ScreenList')
def test_show_display_no_display(mocked_screenlist, mocked_webengine, mocked_addWidget, mock_settings): def test_show_display_no_display(mocked_screenlist, display_window_env, mock_settings):
""" """
Test show_display function when no displays are available Test show_display function when no displays are available
""" """
@ -412,9 +489,7 @@ def test_show_display_no_display(mocked_screenlist, mocked_webengine, mocked_add
assert display_window.run_javascript.call_count == 0 assert display_window.run_javascript.call_count == 0
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_hide_display_to_screen(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_hide_display_to_screen(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test hide to screen in the hide_display function Test hide to screen in the hide_display function
""" """
@ -432,9 +507,7 @@ def test_hide_display_to_screen(mocked_webengine, mocked_addWidget, mock_setting
display_window.run_javascript.assert_called_once_with('Display.toTransparent();') display_window.run_javascript.assert_called_once_with('Display.toTransparent();')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_hide_display_to_blank(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_hide_display_to_blank(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test hide to screen in the hide_display function Test hide to screen in the hide_display function
""" """
@ -450,9 +523,7 @@ def test_hide_display_to_blank(mocked_webengine, mocked_addWidget, mock_settings
display_window.run_javascript.assert_called_once_with('Display.toBlack();') display_window.run_javascript.assert_called_once_with('Display.toBlack();')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_hide_display_to_theme(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_hide_display_to_theme(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test hide to screen in the hide_display function Test hide to screen in the hide_display function
""" """
@ -468,9 +539,7 @@ def test_hide_display_to_theme(mocked_webengine, mocked_addWidget, mock_settings
display_window.run_javascript.assert_called_once_with('Display.toTheme();') display_window.run_javascript.assert_called_once_with('Display.toTheme();')
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_hide_display_to_transparent(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_hide_display_to_transparent(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test hide to screen in the hide_display function Test hide to screen in the hide_display function
""" """
@ -488,9 +557,7 @@ def test_hide_display_to_transparent(mocked_webengine, mocked_addWidget, mock_se
assert display_window.setVisible.call_count == 0 assert display_window.setVisible.call_count == 0
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout') def test_hide_transparent_to_screen(display_window_env, mock_settings):
@patch('openlp.core.display.webengine.WebEngineView')
def test_hide_transparent_to_screen(mocked_webengine, mocked_addWidget, mock_settings):
""" """
Test that when going transparent, and the disable transparent setting is enabled, Test that when going transparent, and the disable transparent setting is enabled,
the screen mode should be used. the screen mode should be used.
@ -507,10 +574,8 @@ def test_hide_transparent_to_screen(mocked_webengine, mocked_addWidget, mock_set
display_window.setVisible.assert_called_once_with(False) display_window.setVisible.assert_called_once_with(False)
@patch('openlp.core.display.window.QtWidgets.QVBoxLayout')
@patch('openlp.core.display.webengine.WebEngineView')
@patch('openlp.core.display.window.ScreenList') @patch('openlp.core.display.window.ScreenList')
def test_hide_display_no_display(mocked_screenlist, mocked_webengine, mocked_addWidget, mock_settings): def test_hide_display_no_display(mocked_screenlist, display_window_env, mock_settings):
""" """
Test show_display function when no displays are available Test show_display function when no displays are available
""" """

View File

@ -834,9 +834,7 @@ def test_to_dict_text_item(state_media, settings, service_item_env):
assert result == expected_dict assert result == expected_dict
@patch('openlp.core.lib.serviceitem.AppLocation.get_data_path') def test_to_dict_image_item(state_media, settings, service_item_env):
@patch('openlp.core.lib.serviceitem.image_to_data_uri')
def test_to_dict_image_item(mocked_image_to_data_uri, mocked_get_data_path, state_media, settings, service_item_env):
""" """
Test that the to_dict() method returns the correct data for the service item Test that the to_dict() method returns the correct data for the service item
""" """
@ -847,12 +845,7 @@ def test_to_dict_image_item(mocked_image_to_data_uri, mocked_get_data_path, stat
service_item.add_icon = MagicMock() service_item.add_icon = MagicMock()
FormattingTags.load_tags() FormattingTags.load_tags()
line = convert_file_service_item(TEST_PATH, 'serviceitem_image_2.osj') line = convert_file_service_item(TEST_PATH, 'serviceitem_image_2.osj')
mocked_get_data_path.return_value = Path('/path/to/') service_item.set_from_service(line)
mocked_image_to_data_uri.side_effect = lambda x: 'your image uri at: {}'.format(x.as_posix())
with patch('openlp.core.lib.serviceitem.sha256_file_hash') as mocked_sha256_file_hash:
mocked_sha256_file_hash.return_value = '3a7ccbdb0b5a3db169c4692d7aad0ec8'
service_item.set_from_service(line)
# WHEN: to_dict() is called # WHEN: to_dict() is called
result = service_item.to_dict() result = service_item.to_dict()
@ -870,7 +863,6 @@ def test_to_dict_image_item(mocked_image_to_data_uri, mocked_get_data_path, stat
'slides': [ 'slides': [
{ {
'html': 'image_1.jpg', 'html': 'image_1.jpg',
'img': 'your image uri at: /path/to/images/thumbnails/image_1.jpg',
'selected': False, 'selected': False,
'tag': 1, 'tag': 1,
'text': 'image_1.jpg', 'text': 'image_1.jpg',