Fixed up some issues and refactored a method that wasn't actually a test.

This commit is contained in:
Raoul Snyman 2016-06-02 01:14:58 +02:00
parent caeb3d3ff7
commit ec8ace4929
3 changed files with 58 additions and 46 deletions

View File

@ -26,35 +26,38 @@ from unittest import TestCase
from openlp.plugins.bibles import lib
from openlp.plugins.bibles.lib import SearchResults
from tests.functional import MagicMock, patch
from tests.functional import patch
class TestLib(TestCase):
"""
Test the functions in the :mod:`lib` module.
"""
def test_get_reference_separator(self):
@patch('openlp.plugins.bibles.lib.update_reference_separators')
def test_get_reference_separator(self, mocked_update_reference_separators):
"""
Test the get_reference_separator method
"""
# GIVEN: A list of expected separators
# GIVEN: A list of expected separators and the lib module's constant is empty
lib.REFERENCE_SEPARATORS = None
separators = {'sep_r': '\\s*(?:e)\\s*', 'sep_e_default': 'end', 'sep_v_display': 'w', 'sep_l_display': 'r',
'sep_v_default': ':|v|V|verse|verses', 'sep_l': '\\s*(?:r)\\s*', 'sep_l_default': ',|and',
'sep_e': '\\s*(?:t)\\s*', 'sep_v': '\\s*(?:w)\\s*', 'sep_r_display': 'e', 'sep_r_default': '-|to'}
def side_effect():
def _update_side_effect():
"""
Update the references after mocking out the method
"""
lib.REFERENCE_SEPARATORS = separators
with patch('openlp.plugins.bibles.lib.update_reference_separators',
**{'side_effect': side_effect}) as mocked_update_reference_separators:
mocked_update_reference_separators.side_effect = _update_side_effect
# WHEN: Calling get_reference_separator
for key, value in separators.items():
ret = lib.get_reference_separator(key)
# WHEN: Calling get_reference_separator
for key, value in separators.items():
_ = lib.get_reference_separator(key)
# THEN: get_reference_separator should return the correct separator
self.assertEqual(separators[key], value)
mocked_update_reference_separators.assert_called_once_with()
# THEN: get_reference_separator should return the correct separator
self.assertEqual(separators[key], value)
mocked_update_reference_separators.assert_called_once_with()
def test_search_results_creation(self):
"""

View File

@ -38,6 +38,35 @@ from tests.functional import patch, MagicMock
TEST_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'resources', 'opsprosongs'))
def _get_item(data, key):
"""
Get an item or return a blank string
"""
if key in data:
return data[key]
return ''
def _build_data(test_file, dual_language):
"""
Build the test data
"""
song = MagicMock()
song.ID = 100
song.SongNumber = 123
song.SongBookName = 'The Song Book'
song.Title = 'Song Title'
song.CopyrightText = 'Music and text by me'
song.Version = '1'
song.Origin = '...'
lyrics = MagicMock()
test_file = open(os.path.join(TEST_PATH, test_file), 'rb')
lyrics.Lyrics = test_file.read().decode()
lyrics.Type = 1
lyrics.IsDualLanguage = dual_language
return song, lyrics
@skipUnless(CAN_RUN_TESTS, 'Not Windows, skipping test')
class TestOpsProSongImport(TestCase):
"""
@ -72,7 +101,7 @@ class TestOpsProSongImport(TestCase):
mocked_manager = MagicMock()
importer = OPSProImport(mocked_manager, filenames=[])
importer.finish = MagicMock()
song, lyrics = self._build_test_data('you are so faithfull.txt', False)
song, lyrics = _build_data('you are so faithfull.txt', False)
# WHEN: An importer object is created
importer.process_song(song, lyrics, [])
@ -80,8 +109,8 @@ class TestOpsProSongImport(TestCase):
# THEN: The imported data should look like expected
result_file = open(os.path.join(TEST_PATH, 'You are so faithful.json'), 'rb')
result_data = json.loads(result_file.read().decode())
self.assertListEqual(importer.verses, self._get_data(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, self._get_data(result_data, 'verse_order_list'))
self.assertListEqual(importer.verses, _get_item(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, _get_item(result_data, 'verse_order_list'))
@patch('openlp.plugins.songs.lib.importers.opspro.SongImport')
def test_join_and_split(self, mocked_songimport):
@ -92,7 +121,7 @@ class TestOpsProSongImport(TestCase):
mocked_manager = MagicMock()
importer = OPSProImport(mocked_manager, filenames=[])
importer.finish = MagicMock()
song, lyrics = self._build_test_data('amazing grace.txt', False)
song, lyrics = _build_data('amazing grace.txt', False)
# WHEN: An importer object is created
importer.process_song(song, lyrics, [])
@ -100,8 +129,8 @@ class TestOpsProSongImport(TestCase):
# THEN: The imported data should look like expected
result_file = open(os.path.join(TEST_PATH, 'Amazing Grace.json'), 'rb')
result_data = json.loads(result_file.read().decode())
self.assertListEqual(importer.verses, self._get_data(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, self._get_data(result_data, 'verse_order_list'))
self.assertListEqual(importer.verses, _get_item(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, _get_item(result_data, 'verse_order_list'))
@patch('openlp.plugins.songs.lib.importers.opspro.SongImport')
def test_trans_off_tag(self, mocked_songimport):
@ -112,7 +141,7 @@ class TestOpsProSongImport(TestCase):
mocked_manager = MagicMock()
importer = OPSProImport(mocked_manager, filenames=[])
importer.finish = MagicMock()
song, lyrics = self._build_test_data('amazing grace2.txt', True)
song, lyrics = _build_data('amazing grace2.txt', True)
# WHEN: An importer object is created
importer.process_song(song, lyrics, [])
@ -120,8 +149,8 @@ class TestOpsProSongImport(TestCase):
# THEN: The imported data should look like expected
result_file = open(os.path.join(TEST_PATH, 'Amazing Grace.json'), 'rb')
result_data = json.loads(result_file.read().decode())
self.assertListEqual(importer.verses, self._get_data(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, self._get_data(result_data, 'verse_order_list'))
self.assertListEqual(importer.verses, _get_item(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, _get_item(result_data, 'verse_order_list'))
@patch('openlp.plugins.songs.lib.importers.opspro.SongImport')
def test_trans_tag(self, mocked_songimport):
@ -132,7 +161,7 @@ class TestOpsProSongImport(TestCase):
mocked_manager = MagicMock()
importer = OPSProImport(mocked_manager, filenames=[])
importer.finish = MagicMock()
song, lyrics = self._build_test_data('amazing grace3.txt', True)
song, lyrics = _build_data('amazing grace3.txt', True)
# WHEN: An importer object is created
importer.process_song(song, lyrics, [])
@ -140,26 +169,6 @@ class TestOpsProSongImport(TestCase):
# THEN: The imported data should look like expected
result_file = open(os.path.join(TEST_PATH, 'Amazing Grace3.json'), 'rb')
result_data = json.loads(result_file.read().decode())
self.assertListEqual(importer.verses, self._get_data(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, self._get_data(result_data, 'verse_order_list'))
self.assertListEqual(importer.verses, _get_item(result_data, 'verses'))
self.assertListEqual(importer.verse_order_list_generated, _get_item(result_data, 'verse_order_list'))
def _get_data(self, data, key):
if key in data:
return data[key]
return ''
def test__build_data(self, test_file, dual_language):
song = MagicMock()
song.ID = 100
song.SongNumber = 123
song.SongBookName = 'The Song Book'
song.Title = 'Song Title'
song.CopyrightText = 'Music and text by me'
song.Version = '1'
song.Origin = '...'
lyrics = MagicMock()
test_file = open(os.path.join(TEST_PATH, test_file), 'rb')
lyrics.Lyrics = test_file.read().decode()
lyrics.Type = 1
lyrics.IsDualLanguage = dual_language
return song, lyrics

View File

@ -62,7 +62,7 @@ class TestEditVerseForm(TestCase, TestMixin):
# THEN: The default value is correct
self.assertEqual(self.form.verse_text_edit.toPlainText(), '', 'The verse edit box is empty.')
def type_verse_text_tests(self):
def test_type_verse_text(self):
"""
Test that typing into the verse text edit box returns the correct text
"""