openlp/tests/openlp_core/projectors/test_projector_editform.py

104 lines
4.4 KiB
Python
Raw Normal View History

2014-12-18 19:06:25 +00:00
# -*- coding: utf-8 -*-
2019-04-13 13:00:22 +00:00
##########################################################################
# OpenLP - Open Source Lyrics Projection #
# ---------------------------------------------------------------------- #
# Copyright (c) 2008-2020 OpenLP Developers #
2019-04-13 13:00:22 +00:00
# ---------------------------------------------------------------------- #
# 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/>. #
##########################################################################
2014-12-18 19:06:25 +00:00
"""
2017-11-10 11:59:38 +00:00
Interface tests to test the openlp.core.projectors.editform.ProjectorEditForm()
2014-12-18 19:06:25 +00:00
class and methods.
"""
2016-01-07 21:36:43 +00:00
import os
2014-12-18 19:06:25 +00:00
from unittest import TestCase
from unittest.mock import patch
2014-12-18 19:06:25 +00:00
2017-10-07 07:05:07 +00:00
from openlp.core.common.registry import Registry
from openlp.core.common.settings import Settings
from openlp.core.projectors.db import Projector, ProjectorDB
from openlp.core.projectors.editform import ProjectorEditForm
2014-12-18 19:06:25 +00:00
from tests.helpers.testmixin import TestMixin
2018-10-02 04:39:42 +00:00
from tests.resources.projector.data import TEST1_DATA, TEST_DB
2014-12-18 19:06:25 +00:00
class TestProjectorEditForm(TestCase, TestMixin):
"""
Test the methods in the ProjectorEditForm class
"""
def setUp(self):
"""
Create the UI and setup necessary options
:return: None
"""
self.setup_application()
2017-06-03 23:27:19 +00:00
self.build_settings()
2014-12-18 19:06:25 +00:00
Registry.create()
Registry().register('settings', Settings())
2017-11-10 11:59:38 +00:00
with patch('openlp.core.projectors.db.init_url') as mocked_init_url:
2016-01-07 21:36:43 +00:00
if os.path.exists(TEST_DB):
os.unlink(TEST_DB)
mocked_init_url.return_value = 'sqlite:///' + TEST_DB
self.projectordb = ProjectorDB()
self.projector_form = ProjectorEditForm(projectordb=self.projectordb)
2014-12-18 19:06:25 +00:00
def tearDown(self):
"""
Close database session.
Delete all C++ objects at end so we don't segfault.
:return: None
"""
self.projectordb.session.close()
del self.projector_form
2014-12-18 19:06:25 +00:00
self.destroy_settings()
2017-11-10 11:59:38 +00:00
@patch('openlp.core.projectors.editform.QtWidgets.QDialog.exec')
def test_edit_form_add_projector(self, mocked_exec):
2014-12-18 19:06:25 +00:00
"""
Test projector edit form with no parameters creates a new entry.
:return: None
"""
# GIVEN: Mocked setup
# WHEN: Calling edit form with no parameters
self.projector_form.exec()
item = self.projector_form.projector
# THEN: Should be creating a new instance
self.assertTrue(self.projector_form.new_projector,
'Projector edit form should be marked as a new entry')
self.assertTrue((item.ip is None and item.name is None),
'Projector edit form should have a new Projector() instance to edit')
2017-11-10 11:59:38 +00:00
@patch('openlp.core.projectors.editform.QtWidgets.QDialog.exec')
def test_edit_form_edit_projector(self, mocked_exec):
2014-12-18 19:06:25 +00:00
"""
Test projector edit form with existing projector entry
:return:
"""
# GIVEN: Mocked setup
# WHEN: Calling edit form with existing projector instance
self.projector_form.exec(projector=Projector(**TEST1_DATA))
item = self.projector_form.projector
# THEN: Should be editing an existing entry
self.assertFalse(self.projector_form.new_projector,
'Projector edit form should be marked as existing entry')
self.assertTrue((item.ip is TEST1_DATA['ip'] and item.name is TEST1_DATA['name']),
'Projector edit form should have TEST1_DATA() instance to edit')