openlp/tests/openlp_core/projectors/test_projector_editform.py

77 lines
3.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/>. #
##########################################################################
"""
Interface tests to test the openlp.core.projectors.editform.ProjectorEditForm()
class and methods.
"""
import pytest
from unittest.mock import patch
from openlp.core.projectors.db import Projector, ProjectorDB
from openlp.core.projectors.editform import ProjectorEditForm
from tests.resources.projector.data import TEST1_DATA, TEST_DB
@pytest.fixture()
def projector_form(settings):
with patch('openlp.core.projectors.db.init_url') as mocked_init_url:
mocked_init_url.return_value = 'sqlite:///' + TEST_DB
projectordb = ProjectorDB()
projector_frm = ProjectorEditForm(projectordb=projectordb)
yield projector_frm
projectordb.session.close()
del projector_frm
@patch('openlp.core.projectors.editform.QtWidgets.QDialog.exec')
def test_edit_form_add_projector(mocked_exec, projector_form):
"""
Test projector edit form with no parameters creates a new entry.
:return: None
"""
# GIVEN: Mocked setup
# WHEN: Calling edit form with no parameters
projector_form.exec()
item = projector_form.projector
# THEN: Should be creating a new instance
assert projector_form.new_projector, 'Projector edit form should be marked as a new entry'
assert (item.ip is None and item.name is None), 'Projector edit form should have a new Projector() instance to edit'
@patch('openlp.core.projectors.editform.QtWidgets.QDialog.exec')
def test_edit_form_edit_projector(mocked_exec, projector_form):
"""
Test projector edit form with existing projector entry
:return:
"""
# GIVEN: Mocked setup
# WHEN: Calling edit form with existing projector instance
projector_form.exec(projector=Projector(**TEST1_DATA))
item = projector_form.projector
# THEN: Should be editing an existing entry
assert projector_form.new_projector is False, 'Projector edit form should be marked as existing entry'
assert item.ip is TEST1_DATA['ip'] and item.name is TEST1_DATA['name'], \
'Projector edit form should have TEST1_DATA() instance to edit'