~tomasgroth/openlp/portable-path

« back to all changes in this revision

Viewing changes to tests/functional/openlp_core/api/endpoint/test_controller.py

  • Committer: Tomas Groth
  • Date: 2019-04-30 19:02:42 UTC
  • mfrom: (2829.2.32 openlp)
  • Revision ID: tomasgroth@yahoo.dk-20190430190242-6zwjk8724tyux70m
trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
# import sys
22
23
from unittest import TestCase
23
 
from unittest.mock import MagicMock
 
24
from unittest.mock import MagicMock, patch
24
25
 
25
26
from PyQt5 import QtCore
26
27
 
 
28
from openlp.core.state import State
 
29
# Mock QtWebEngineWidgets
 
30
# sys.modules['PyQt5.QtWebEngineWidgets'] = MagicMock()
 
31
 
 
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
32
 
 
 
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
35
38
 
36
 
TEST_PATH = str(RESOURCE_PATH / 'service')
 
39
 
 
40
TEST_PATH = RESOURCE_PATH / 'service'
37
41
 
38
42
SCREEN = {
39
43
    'primary': False,
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)
62
 
        renderer = Renderer()
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']})
 
68
            ]
 
69
            self.screens = ScreenList.create(self.desktop)
 
70
        # Mock the renderer and its format_slide method
 
71
        self.mocked_renderer = MagicMock()
 
72
 
 
73
        def side_effect_return_arg(arg1, arg2):
 
74
            return [arg1]
 
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)
65
79
 
66
80
    def test_controller_text_empty(self):
67
81
        """
68
82
        Remote API Tests : test the controller text method can be called with empty service item
69
83
        """
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
 
89
 
72
90
        # WHEN: I trigger the method
73
 
        ret = controller_text("SomeText")
 
91
        ret = controller_text(MagicMock())
 
92
 
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
78
96
 
79
97
    def test_controller_text(self):
80
98
        """
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")
 
112
 
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
98
121
        """
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()
 
126
 
101
127
        # WHEN: I trigger the method
102
128
        controller_direction(None, 'live', 'next')
 
129
 
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()
105
132
 
106
133
    def test_controller_direction_previous(self):
107
134
        """
108
135
        Text the live next method is triggered
109
136
        """
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()
 
141
 
112
142
        # WHEN: I trigger the method
113
143
        controller_direction(None, 'live', 'previous')
 
144
 
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()