4
4
###############################################################################
5
5
# OpenLP - Open Source Lyrics Projection #
6
6
# --------------------------------------------------------------------------- #
7
# Copyright (c) 2008-2018 OpenLP Developers #
7
# Copyright (c) 2008-2019 OpenLP Developers #
8
8
# --------------------------------------------------------------------------- #
9
9
# This program is free software; you can redistribute it and/or modify it #
10
10
# under the terms of the GNU General Public License as published by the Free #
19
19
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
20
20
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
21
21
###############################################################################
22
23
from unittest import TestCase
23
from unittest.mock import MagicMock
24
from unittest.mock import MagicMock, patch
25
26
from PyQt5 import QtCore
28
from openlp.core.state import State
29
# Mock QtWebEngineWidgets
30
# sys.modules['PyQt5.QtWebEngineWidgets'] = MagicMock()
32
from openlp.core.api.endpoint.controller import controller_direction, controller_text
27
33
from openlp.core.common.registry import Registry
28
from openlp.core.api.endpoint.controller import controller_text, controller_direction
29
from openlp.core.display.renderer import Renderer
30
34
from openlp.core.display.screens import ScreenList
31
from openlp.core.lib import ServiceItem
35
from openlp.core.lib.serviceitem import ServiceItem
33
36
from tests.utils import convert_file_service_item
34
37
from tests.utils.constants import RESOURCE_PATH
36
TEST_PATH = str(RESOURCE_PATH / 'service')
40
TEST_PATH = RESOURCE_PATH / 'service'
58
62
self.desktop.primaryScreen.return_value = SCREEN['primary']
59
63
self.desktop.screenCount.return_value = SCREEN['number']
60
64
self.desktop.screenGeometry.return_value = SCREEN['size']
61
self.screens = ScreenList.create(self.desktop)
63
renderer.empty_height = 1000
65
with patch('openlp.core.display.screens.QtWidgets.QApplication.screens') as mocked_screens:
66
mocked_screens.return_value = [
67
MagicMock(**{'geometry.return_value': SCREEN['size']})
69
self.screens = ScreenList.create(self.desktop)
70
# Mock the renderer and its format_slide method
71
self.mocked_renderer = MagicMock()
73
def side_effect_return_arg(arg1, arg2):
75
self.mocked_slide_formater = MagicMock(side_effect=side_effect_return_arg)
76
self.mocked_renderer.format_slide = self.mocked_slide_formater
64
77
Registry().register('live_controller', self.mocked_live_controller)
78
Registry().register('renderer', self.mocked_renderer)
66
80
def test_controller_text_empty(self):
68
82
Remote API Tests : test the controller text method can be called with empty service item
70
84
# GIVEN: A mocked service with a dummy service item
71
self.mocked_live_controller.service_item = MagicMock()
85
mocked_service_item = MagicMock()
86
mocked_service_item.get_frames.return_value = []
87
mocked_service_item.unique_identifier = 'mock-service-item'
88
self.mocked_live_controller.service_item = mocked_service_item
72
90
# WHEN: I trigger the method
73
ret = controller_text("SomeText")
91
ret = controller_text(MagicMock())
74
93
# THEN: I get a basic set of results
75
results = ret['results']
76
assert isinstance(results['item'], MagicMock)
77
assert len(results['slides']) == 0
94
assert ret['results']['item'] == 'mock-service-item'
95
assert len(ret['results']['slides']) == 0
79
97
def test_controller_text(self):
83
101
# GIVEN: A mocked service with a dummy service item
84
102
line = convert_file_service_item(TEST_PATH, 'serviceitem_custom_1.osj')
85
103
self.mocked_live_controller.service_item = ServiceItem(None)
104
State().load_settings()
105
State().add_service("media", 0)
106
State().update_pre_conditions("media", True)
107
State().flush_preconditions()
86
108
self.mocked_live_controller.service_item.set_from_service(line)
87
self.mocked_live_controller.service_item.render(True)
109
self.mocked_live_controller.service_item._create_slides()
88
110
# WHEN: I trigger the method
89
111
ret = controller_text("SomeText")
90
113
# THEN: I get a basic set of results
91
114
results = ret['results']
92
115
assert isinstance(ret, dict)
97
120
Text the live next method is triggered
99
122
# GIVEN: A mocked service with a dummy service item
123
mocked_emit = MagicMock()
124
self.mocked_live_controller.slidecontroller_live_next.emit = mocked_emit
100
125
self.mocked_live_controller.service_item = MagicMock()
101
127
# WHEN: I trigger the method
102
128
controller_direction(None, 'live', 'next')
103
130
# THEN: The correct method is called
104
self.mocked_live_controller.slidecontroller_live_next.emit.assert_called_once_with()
131
mocked_emit.assert_called_once_with()
106
133
def test_controller_direction_previous(self):
108
135
Text the live next method is triggered
110
137
# GIVEN: A mocked service with a dummy service item
138
mocked_emit = MagicMock()
139
self.mocked_live_controller.slidecontroller_live_previous.emit = mocked_emit
111
140
self.mocked_live_controller.service_item = MagicMock()
112
142
# WHEN: I trigger the method
113
143
controller_direction(None, 'live', 'previous')
114
145
# THEN: The correct method is called
115
self.mocked_live_controller.slidecontroller_live_previous.emit.assert_called_once_with()
146
mocked_emit.assert_called_once_with()