forked from openlp/openlp
142 lines
5.4 KiB
Python
142 lines
5.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
##########################################################################
|
|
# OpenLP - Open Source Lyrics Projection #
|
|
# ---------------------------------------------------------------------- #
|
|
# Copyright (c) 2008-2022 OpenLP Developers #
|
|
# ---------------------------------------------------------------------- #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
|
##########################################################################
|
|
"""
|
|
Test methods called by toolbar icons with minimal flow paths and tests
|
|
|
|
on_add_projector()
|
|
on_doubleclick_item()
|
|
on_edit_input()
|
|
|
|
"""
|
|
|
|
import logging
|
|
import openlp.core.projectors.manager
|
|
|
|
from unittest.mock import DEFAULT, patch
|
|
|
|
from openlp.core.projectors.constants import QSOCKET_STATE, \
|
|
S_CONNECTED, S_NOT_CONNECTED
|
|
|
|
from tests.helpers.projector import FakePJLink
|
|
|
|
test_module = openlp.core.projectors.manager.__name__
|
|
|
|
|
|
def test_on_add_projector(projector_manager):
|
|
"""
|
|
Test add new projector edit GUI is called properly
|
|
"""
|
|
# GIVEN: Test environment
|
|
# Mock to keep from getting event not registered error in Registry()
|
|
# during bootstrap_post_set_up()
|
|
with patch.multiple(projector_manager,
|
|
udp_listen_add=DEFAULT,
|
|
udp_listen_delete=DEFAULT):
|
|
projector_manager.bootstrap_initialise()
|
|
projector_manager.bootstrap_post_set_up()
|
|
|
|
# Have to wait for projector_manager.bootstrap_post_set_up() before projector_form is initialized
|
|
with patch.object(projector_manager, 'projector_form') as mock_form:
|
|
|
|
# WHEN called
|
|
projector_manager.on_add_projector()
|
|
|
|
# THEN: projector form called
|
|
mock_form.exec.assert_called_once()
|
|
|
|
|
|
def test_on_edit_input(projector_manager, pjlink):
|
|
"""
|
|
Test on_edit_input calls on_select_input properly
|
|
"""
|
|
# GIVEN: Test setup
|
|
with patch.object(projector_manager, 'on_select_input') as mock_input:
|
|
|
|
# WHEN: Called with pjlink instance
|
|
projector_manager.on_edit_input(opt=pjlink)
|
|
|
|
# THEN: appropriate call made
|
|
mock_input.assert_called_with(opt=pjlink, edit=True)
|
|
|
|
|
|
def test_on_doubleclick_item_connected(projector_manager_mtdb, caplog):
|
|
"""
|
|
Test projector.connect_to_host() not called when status is S_CONNECTED
|
|
"""
|
|
t_1 = FakePJLink()
|
|
caplog.set_level(logging.DEBUG)
|
|
logs = [(test_module, logging.DEBUG,
|
|
f'ProjectorManager: "{t_1.pjlink.name}" already connected - skipping')]
|
|
|
|
with patch.multiple(projector_manager_mtdb,
|
|
udp_listen_add=DEFAULT,
|
|
udp_listen_delete=DEFAULT,
|
|
update_icons=DEFAULT,
|
|
_add_projector=DEFAULT) as mock_manager:
|
|
|
|
projector_manager_mtdb.bootstrap_initialise()
|
|
# projector_list_widget created here
|
|
projector_manager_mtdb.bootstrap_post_set_up()
|
|
|
|
# Add ProjectorItem instances to projector_list_widget
|
|
mock_manager['_add_projector'].return_value = t_1
|
|
projector_manager_mtdb.add_projector(projector=t_1)
|
|
|
|
# WHEN: Called
|
|
t_1.state.return_value = QSOCKET_STATE[S_CONNECTED]
|
|
caplog.clear()
|
|
projector_manager_mtdb.on_doubleclick_item(projector_manager_mtdb.projector_list_widget.item(0))
|
|
|
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
|
t_1.connect_to_host.assert_not_called()
|
|
|
|
|
|
def test_on_doubleclick_item_not_connected(projector_manager_mtdb, caplog):
|
|
"""
|
|
Test projector.connect_to_host() called
|
|
"""
|
|
t_1 = FakePJLink()
|
|
caplog.set_level(logging.DEBUG)
|
|
logs = [(test_module, logging.DEBUG,
|
|
f'ProjectorManager: "{t_1.pjlink.name}" calling connect_to_host()')]
|
|
|
|
with patch.multiple(projector_manager_mtdb,
|
|
udp_listen_add=DEFAULT,
|
|
udp_listen_delete=DEFAULT,
|
|
update_icons=DEFAULT,
|
|
_add_projector=DEFAULT) as mock_manager:
|
|
|
|
projector_manager_mtdb.bootstrap_initialise()
|
|
# projector_list_widget created here
|
|
projector_manager_mtdb.bootstrap_post_set_up()
|
|
|
|
# Add ProjectorItem instances to projector_list_widget
|
|
mock_manager['_add_projector'].return_value = t_1
|
|
projector_manager_mtdb.add_projector(projector=t_1)
|
|
|
|
# WHEN: Called
|
|
t_1.state.return_value = QSOCKET_STATE[S_NOT_CONNECTED]
|
|
caplog.clear()
|
|
projector_manager_mtdb.on_doubleclick_item(projector_manager_mtdb.projector_list_widget.item(0))
|
|
|
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
|
t_1.connect_to_host.assert_called_once()
|