Some tests to go with it

This commit is contained in:
Raoul Snyman 2017-03-01 19:35:04 -07:00
parent 77d36b607c
commit 35af0af211

View File

@ -23,6 +23,7 @@
Package to test the openlp.plugins.songs.forms.authorsform package. Package to test the openlp.plugins.songs.forms.authorsform package.
""" """
from unittest import TestCase from unittest import TestCase
from unittest.mock import patch
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
@ -138,3 +139,217 @@ class TestAuthorsForm(TestCase, TestMixin):
# THEN: The display_name_edit should have the correct value # THEN: The display_name_edit should have the correct value
self.assertEqual(self.form.display_edit.text(), display_name, 'The display name should be set correctly') self.assertEqual(self.form.display_edit.text(), display_name, 'The display name should be set correctly')
@patch('openlp.plugins.songs.forms.authorsform.QtWidgets.QDialog.exec')
def test_exec(self, mocked_exec):
"""
Test the exec() method
"""
# GIVEN: An authors for and various mocked objects
with patch.object(self.form.first_name_edit, 'clear') as mocked_first_name_edit_clear, \
patch.object(self.form.last_name_edit, 'clear') as mocked_last_name_edit_clear, \
patch.object(self.form.display_edit, 'clear') as mocked_display_edit_clear, \
patch.object(self.form.first_name_edit, 'setFocus') as mocked_first_name_edit_setFocus:
# WHEN: The exec() method is called
self.form.exec(clear=True)
# THEN: The clear and exec() methods should have been called
mocked_first_name_edit_clear.assert_called_once_with()
mocked_last_name_edit_clear.assert_called_once_with()
mocked_display_edit_clear.assert_called_once_with()
mocked_first_name_edit_setFocus.assert_called_once_with()
mocked_exec.assert_called_once_with(self.form)
def test_first_name_edited(self):
"""
Test the on_first_name_edited() method
"""
# GIVEN: An author form
self.form.auto_display_name = True
with patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.display_edit, 'setText') as mocked_display_edit_setText:
mocked_last_name_edit_text.return_value = 'Newton'
# WHEN: on_first_name_edited() is called
self.form.on_first_name_edited('John')
# THEN: The display name should be updated
assert mocked_last_name_edit_text.call_count == 2
mocked_display_edit_setText.assert_called_once_with('John Newton')
def test_first_name_edited_no_auto(self):
"""
Test the on_first_name_edited() method without auto_display_name
"""
# GIVEN: An author form
self.form.auto_display_name = False
with patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.display_edit, 'setText') as mocked_display_edit_setText:
# WHEN: on_first_name_edited() is called
self.form.on_first_name_edited('John')
# THEN: The display name should not be updated
assert mocked_last_name_edit_text.call_count == 0
assert mocked_display_edit_setText.call_count == 0
def test_last_name_edited(self):
"""
Test the on_last_name_edited() method
"""
# GIVEN: An author form
self.form.auto_display_name = True
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.display_edit, 'setText') as mocked_display_edit_setText:
mocked_first_name_edit_text.return_value = 'John'
# WHEN: on_last_name_edited() is called
self.form.on_last_name_edited('Newton')
# THEN: The display name should be updated
assert mocked_first_name_edit_text.call_count == 2
mocked_display_edit_setText.assert_called_once_with('John Newton')
def test_last_name_edited_no_auto(self):
"""
Test the on_last_name_edited() method without auto_display_name
"""
# GIVEN: An author form
self.form.auto_display_name = False
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.display_edit, 'setText') as mocked_display_edit_setText:
# WHEN: on_last_name_edited() is called
self.form.on_last_name_edited('Newton')
# THEN: The display name should not be updated
assert mocked_first_name_edit_text.call_count == 0
assert mocked_display_edit_setText.call_count == 0
@patch('openlp.plugins.songs.forms.authorsform.critical_error_message_box')
def test_accept_no_first_name(self, mocked_critical_error):
"""
Test the accept() method with no first name
"""
# GIVEN: A form and no text in thefirst name edit
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.first_name_edit, 'setFocus') as mocked_first_name_edit_setFocus:
mocked_first_name_edit_text.return_value = ''
# WHEN: accept() is called
result = self.form.accept()
# THEN: The result should be false and a critical error displayed
assert result is False
mocked_critical_error.assert_called_once_with(message='You need to type in the first name of the author.')
mocked_first_name_edit_text.assert_called_once_with()
mocked_first_name_edit_setFocus.assert_called_once_with()
@patch('openlp.plugins.songs.forms.authorsform.critical_error_message_box')
def test_accept_no_last_name(self, mocked_critical_error):
"""
Test the accept() method with no last name
"""
# GIVEN: A form and no text in the last name edit
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.last_name_edit, 'setFocus') as mocked_last_name_edit_setFocus:
mocked_first_name_edit_text.return_value = 'John'
mocked_last_name_edit_text.return_value = ''
# WHEN: accept() is called
result = self.form.accept()
# THEN: The result should be false and a critical error displayed
assert result is False
mocked_critical_error.assert_called_once_with(message='You need to type in the last name of the author.')
mocked_first_name_edit_text.assert_called_once_with()
mocked_last_name_edit_text.assert_called_once_with()
mocked_last_name_edit_setFocus.assert_called_once_with()
@patch('openlp.plugins.songs.forms.authorsform.critical_error_message_box')
def test_accept_no_display_name_no_combine(self, mocked_critical_error):
"""
Test the accept() method with no display name and no combining
"""
# GIVEN: A form and no text in the display name edit
mocked_critical_error.return_value = QtWidgets.QMessageBox.No
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.display_edit, 'text') as mocked_display_edit_text, \
patch.object(self.form.display_edit, 'setFocus') as mocked_display_edit_setFocus:
mocked_first_name_edit_text.return_value = 'John'
mocked_last_name_edit_text.return_value = 'Newton'
mocked_display_edit_text.return_value = ''
# WHEN: accept() is called
result = self.form.accept()
# THEN: The result should be false and a critical error displayed
assert result is False
mocked_critical_error.assert_called_once_with(
message='You have not set a display name for the author, combine the first and last names?',
parent=self.form, question=True)
mocked_first_name_edit_text.assert_called_once_with()
mocked_last_name_edit_text.assert_called_once_with()
mocked_display_edit_text.assert_called_once_with()
mocked_display_edit_setFocus.assert_called_once_with()
@patch('openlp.plugins.songs.forms.authorsform.critical_error_message_box')
@patch('openlp.plugins.songs.forms.authorsform.QtWidgets.QDialog.accept')
def test_accept_no_display_name(self, mocked_accept, mocked_critical_error):
"""
Test the accept() method with no display name and auto-combine
"""
# GIVEN: A form and no text in the display name edit
mocked_accept.return_value = True
mocked_critical_error.return_value = QtWidgets.QMessageBox.Yes
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.display_edit, 'text') as mocked_display_edit_text, \
patch.object(self.form.display_edit, 'setText') as mocked_display_edit_setText:
mocked_first_name_edit_text.return_value = 'John'
mocked_last_name_edit_text.return_value = 'Newton'
mocked_display_edit_text.return_value = ''
# WHEN: accept() is called
result = self.form.accept()
# THEN: The result should be false and a critical error displayed
assert result is True
mocked_critical_error.assert_called_once_with(
message='You have not set a display name for the author, combine the first and last names?',
parent=self.form, question=True)
mocked_first_name_edit_text.assert_called_once_with()
mocked_last_name_edit_text.assert_called_once_with()
mocked_display_edit_text.assert_called_once_with()
mocked_display_edit_setText.assert_called_once_with('John Newton')
mocked_accept.assert_called_once_with(self.form)
@patch('openlp.plugins.songs.forms.authorsform.QtWidgets.QDialog.accept')
def test_accept(self, mocked_accept):
"""
Test the accept() method
"""
# GIVEN: A form and text in the right places
mocked_accept.return_value = True
with patch.object(self.form.first_name_edit, 'text') as mocked_first_name_edit_text, \
patch.object(self.form.last_name_edit, 'text') as mocked_last_name_edit_text, \
patch.object(self.form.display_edit, 'text') as mocked_display_edit_text:
mocked_first_name_edit_text.return_value = 'John'
mocked_last_name_edit_text.return_value = 'Newton'
mocked_display_edit_text.return_value = 'John Newton'
# WHEN: accept() is called
result = self.form.accept()
# THEN: The result should be false and a critical error displayed
assert result is True
mocked_first_name_edit_text.assert_called_once_with()
mocked_last_name_edit_text.assert_called_once_with()
mocked_display_edit_text.assert_called_once_with()
mocked_accept.assert_called_once_with(self.form)