forked from openlp/openlp
bible tests and head
This commit is contained in:
commit
9843d48478
@ -80,6 +80,7 @@ def extension_loader(glob_pattern, excluded_files=[]):
|
|||||||
extension_path = extension_path.relative_to(app_dir)
|
extension_path = extension_path.relative_to(app_dir)
|
||||||
if extension_path.name in excluded_files:
|
if extension_path.name in excluded_files:
|
||||||
continue
|
continue
|
||||||
|
log.debug('Attempting to import %s', extension_path)
|
||||||
module_name = path_to_module(extension_path)
|
module_name = path_to_module(extension_path)
|
||||||
try:
|
try:
|
||||||
importlib.import_module(module_name)
|
importlib.import_module(module_name)
|
||||||
|
@ -71,7 +71,7 @@ class PluginManager(RegistryBase, LogMixin, RegistryProperties):
|
|||||||
"""
|
"""
|
||||||
Scan a directory for objects inheriting from the ``Plugin`` class.
|
Scan a directory for objects inheriting from the ``Plugin`` class.
|
||||||
"""
|
"""
|
||||||
glob_pattern = os.path.join('plugins', '*', '*plugin.py')
|
glob_pattern = os.path.join('plugins', '*', '[!.]*plugin.py')
|
||||||
extension_loader(glob_pattern)
|
extension_loader(glob_pattern)
|
||||||
plugin_classes = Plugin.__subclasses__()
|
plugin_classes = Plugin.__subclasses__()
|
||||||
plugin_objects = []
|
plugin_objects = []
|
||||||
|
@ -181,7 +181,8 @@ class MediaController(RegistryBase, LogMixin, RegistryProperties):
|
|||||||
"""
|
"""
|
||||||
log.debug('_check_available_media_players')
|
log.debug('_check_available_media_players')
|
||||||
controller_dir = os.path.join('core', 'ui', 'media')
|
controller_dir = os.path.join('core', 'ui', 'media')
|
||||||
glob_pattern = os.path.join(controller_dir, '*player.py')
|
# Find all files that do not begin with '.' (lp:#1738047) and end with player.py
|
||||||
|
glob_pattern = os.path.join(controller_dir, '[!.]*player.py')
|
||||||
extension_loader(glob_pattern, ['mediaplayer.py'])
|
extension_loader(glob_pattern, ['mediaplayer.py'])
|
||||||
player_classes = MediaPlayer.__subclasses__()
|
player_classes = MediaPlayer.__subclasses__()
|
||||||
for player_class in player_classes:
|
for player_class in player_classes:
|
||||||
|
@ -370,7 +370,7 @@ class ServiceManager(QtWidgets.QWidget, RegistryBase, Ui_ServiceManager, LogMixi
|
|||||||
:rtype: None
|
:rtype: None
|
||||||
"""
|
"""
|
||||||
self._service_path = file_path
|
self._service_path = file_path
|
||||||
self.main_window.set_service_modified(self.is_modified(), file_path.name)
|
self.set_modified(self.is_modified())
|
||||||
Settings().setValue('servicemanager/last file', file_path)
|
Settings().setValue('servicemanager/last file', file_path)
|
||||||
if file_path and file_path.suffix == '.oszl':
|
if file_path and file_path.suffix == '.oszl':
|
||||||
self._save_lite = True
|
self._save_lite = True
|
||||||
|
@ -336,6 +336,7 @@ class BibleImportForm(OpenLPWizard):
|
|||||||
self.sword_layout.addWidget(self.sword_tab_widget)
|
self.sword_layout.addWidget(self.sword_tab_widget)
|
||||||
self.sword_disabled_label = QtWidgets.QLabel(self.sword_widget)
|
self.sword_disabled_label = QtWidgets.QLabel(self.sword_widget)
|
||||||
self.sword_disabled_label.setObjectName('SwordDisabledLabel')
|
self.sword_disabled_label.setObjectName('SwordDisabledLabel')
|
||||||
|
self.sword_disabled_label.setWordWrap(True)
|
||||||
self.sword_layout.addWidget(self.sword_disabled_label)
|
self.sword_layout.addWidget(self.sword_disabled_label)
|
||||||
self.select_stack.addWidget(self.sword_widget)
|
self.select_stack.addWidget(self.sword_widget)
|
||||||
self.wordproject_widget = QtWidgets.QWidget(self.select_page)
|
self.wordproject_widget = QtWidgets.QWidget(self.select_page)
|
||||||
|
@ -129,7 +129,8 @@ class PresentationPlugin(Plugin):
|
|||||||
"""
|
"""
|
||||||
log.debug('check_pre_conditions')
|
log.debug('check_pre_conditions')
|
||||||
controller_dir = os.path.join('plugins', 'presentations', 'lib')
|
controller_dir = os.path.join('plugins', 'presentations', 'lib')
|
||||||
glob_pattern = os.path.join(controller_dir, '*controller.py')
|
# Find all files that do not begin with '.' (lp:#1738047) and end with controller.py
|
||||||
|
glob_pattern = os.path.join(controller_dir, '[!.]*controller.py')
|
||||||
extension_loader(glob_pattern, ['presentationcontroller.py'])
|
extension_loader(glob_pattern, ['presentationcontroller.py'])
|
||||||
controller_classes = PresentationController.__subclasses__()
|
controller_classes = PresentationController.__subclasses__()
|
||||||
for controller_class in controller_classes:
|
for controller_class in controller_classes:
|
||||||
|
@ -310,7 +310,7 @@ class TestOpenLP(TestCase):
|
|||||||
|
|
||||||
# THEN:
|
# THEN:
|
||||||
assert result is True, "The method should have returned True."
|
assert result is True, "The method should have returned True."
|
||||||
# self.assertFalse(self.openlp.main_window.isMinimized())
|
# assert self.openlp.main_window.isMinimized() is False
|
||||||
|
|
||||||
@patch('openlp.core.app.get_version')
|
@patch('openlp.core.app.get_version')
|
||||||
@patch('openlp.core.app.QtWidgets.QMessageBox.question')
|
@patch('openlp.core.app.QtWidgets.QMessageBox.question')
|
||||||
|
@ -64,9 +64,9 @@ class TestCSVImport(TestCase):
|
|||||||
CSVBible(mocked_manager, path='.', name='.', books_path=Path('books.csv'), verse_path=Path('verse.csv'))
|
CSVBible(mocked_manager, path='.', name='.', books_path=Path('books.csv'), verse_path=Path('verse.csv'))
|
||||||
|
|
||||||
# THEN: The importer should be an instance of BibleImport
|
# THEN: The importer should be an instance of BibleImport
|
||||||
self.assertIsInstance(importer, BibleImport)
|
assert isinstance(importer, BibleImport)
|
||||||
self.assertEqual(importer.books_path, Path('books.csv'))
|
assert importer.books_path == Path('books.csv')
|
||||||
self.assertEqual(importer.verses_path, Path('verse.csv'))
|
assert importer.verses_path == Path('verse.csv')
|
||||||
|
|
||||||
def test_book_namedtuple(self):
|
def test_book_namedtuple(self):
|
||||||
"""
|
"""
|
||||||
@ -77,10 +77,10 @@ class TestCSVImport(TestCase):
|
|||||||
result = Book('id', 'testament_id', 'name', 'abbreviation')
|
result = Book('id', 'testament_id', 'name', 'abbreviation')
|
||||||
|
|
||||||
# THEN: The attributes should match up with the data we used
|
# THEN: The attributes should match up with the data we used
|
||||||
self.assertEqual(result.id, 'id')
|
assert result.id == 'id'
|
||||||
self.assertEqual(result.testament_id, 'testament_id')
|
assert result.testament_id == 'testament_id'
|
||||||
self.assertEqual(result.name, 'name')
|
assert result.name == 'name'
|
||||||
self.assertEqual(result.abbreviation, 'abbreviation')
|
assert result.abbreviation == 'abbreviation'
|
||||||
|
|
||||||
def test_verse_namedtuple(self):
|
def test_verse_namedtuple(self):
|
||||||
"""
|
"""
|
||||||
@ -91,10 +91,10 @@ class TestCSVImport(TestCase):
|
|||||||
result = Verse('book_id_name', 'chapter_number', 'number', 'text')
|
result = Verse('book_id_name', 'chapter_number', 'number', 'text')
|
||||||
|
|
||||||
# THEN: The attributes should match up with the data we used
|
# THEN: The attributes should match up with the data we used
|
||||||
self.assertEqual(result.book_id_name, 'book_id_name')
|
assert result.book_id_name == 'book_id_name'
|
||||||
self.assertEqual(result.chapter_number, 'chapter_number')
|
assert result.chapter_number == 'chapter_number'
|
||||||
self.assertEqual(result.number, 'number')
|
assert result.number == 'number'
|
||||||
self.assertEqual(result.text, 'text')
|
assert result.text == 'text'
|
||||||
|
|
||||||
def test_get_book_name_id(self):
|
def test_get_book_name_id(self):
|
||||||
"""
|
"""
|
||||||
@ -109,7 +109,7 @@ class TestCSVImport(TestCase):
|
|||||||
actual_result = CSVBible.get_book_name(name, books)
|
actual_result = CSVBible.get_book_name(name, books)
|
||||||
|
|
||||||
# THEN: get_book_name() should return the book name associated with that id from the books dictionary
|
# THEN: get_book_name() should return the book name associated with that id from the books dictionary
|
||||||
self.assertEqual(actual_result, expected_result)
|
assert actual_result == expected_result
|
||||||
|
|
||||||
def test_get_book_name(self):
|
def test_get_book_name(self):
|
||||||
"""
|
"""
|
||||||
@ -124,7 +124,7 @@ class TestCSVImport(TestCase):
|
|||||||
actual_result = CSVBible.get_book_name(name, books)
|
actual_result = CSVBible.get_book_name(name, books)
|
||||||
|
|
||||||
# THEN: get_book_name() should return the input
|
# THEN: get_book_name() should return the input
|
||||||
self.assertEqual(actual_result, expected_result)
|
assert actual_result == expected_result
|
||||||
|
|
||||||
def test_parse_csv_file(self):
|
def test_parse_csv_file(self):
|
||||||
"""
|
"""
|
||||||
@ -144,8 +144,8 @@ class TestCSVImport(TestCase):
|
|||||||
result = CSVBible.parse_csv_file(Path('file.csv'), TestTuple)
|
result = CSVBible.parse_csv_file(Path('file.csv'), TestTuple)
|
||||||
|
|
||||||
# THEN: A list of TestTuple instances with the parsed data should be returned
|
# THEN: A list of TestTuple instances with the parsed data should be returned
|
||||||
self.assertEqual(result, [TestTuple('1', 'Line 1', 'Data 1'), TestTuple('2', 'Line 2', 'Data 2'),
|
assert result == [TestTuple('1', 'Line 1', 'Data 1'), TestTuple('2', 'Line 2', 'Data 2'),
|
||||||
TestTuple('3', 'Line 3', 'Data 3')])
|
TestTuple('3', 'Line 3', 'Data 3')]
|
||||||
mocked_open.assert_called_once_with('r', encoding='utf-8', newline='')
|
mocked_open.assert_called_once_with('r', encoding='utf-8', newline='')
|
||||||
mocked_reader.assert_called_once_with(ANY, delimiter=',', quotechar='"')
|
mocked_reader.assert_called_once_with(ANY, delimiter=',', quotechar='"')
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ class TestCSVImport(TestCase):
|
|||||||
# THEN: A ValidationError should be raised
|
# THEN: A ValidationError should be raised
|
||||||
with self.assertRaises(ValidationError) as context:
|
with self.assertRaises(ValidationError) as context:
|
||||||
CSVBible.parse_csv_file(Path('file.csv'), None)
|
CSVBible.parse_csv_file(Path('file.csv'), None)
|
||||||
self.assertEqual(context.exception.msg, 'Parsing "file.csv" failed')
|
assert context.exception.msg == 'Parsing "file.csv" failed'
|
||||||
|
|
||||||
def test_parse_csv_file_csverror(self):
|
def test_parse_csv_file_csverror(self):
|
||||||
"""
|
"""
|
||||||
@ -178,7 +178,7 @@ class TestCSVImport(TestCase):
|
|||||||
# THEN: A ValidationError should be raised
|
# THEN: A ValidationError should be raised
|
||||||
with self.assertRaises(ValidationError) as context:
|
with self.assertRaises(ValidationError) as context:
|
||||||
CSVBible.parse_csv_file(Path('file.csv'), None)
|
CSVBible.parse_csv_file(Path('file.csv'), None)
|
||||||
self.assertEqual(context.exception.msg, 'Parsing "file.csv" failed')
|
assert context.exception.msg == 'Parsing "file.csv" failed'
|
||||||
|
|
||||||
def test_process_books_stopped_import(self):
|
def test_process_books_stopped_import(self):
|
||||||
"""
|
"""
|
||||||
@ -197,8 +197,8 @@ class TestCSVImport(TestCase):
|
|||||||
result = importer.process_books(['Book 1'])
|
result = importer.process_books(['Book 1'])
|
||||||
|
|
||||||
# THEN: increment_progress_bar should not be called and the return value should be an empty dictionary
|
# THEN: increment_progress_bar should not be called and the return value should be an empty dictionary
|
||||||
self.assertFalse(importer.wizard.increment_progress_bar.called)
|
assert importer.wizard.increment_progress_bar.called is False
|
||||||
self.assertEqual(result, {})
|
assert result == {}
|
||||||
|
|
||||||
def test_process_books(self):
|
def test_process_books(self):
|
||||||
"""
|
"""
|
||||||
@ -222,9 +222,9 @@ class TestCSVImport(TestCase):
|
|||||||
|
|
||||||
# THEN: translate and find_and_create_book should have been called with both book names.
|
# THEN: translate and find_and_create_book should have been called with both book names.
|
||||||
# The returned data should be a dictionary with both song's id and names.
|
# The returned data should be a dictionary with both song's id and names.
|
||||||
self.assertEqual(importer.find_and_create_book.mock_calls,
|
assert importer.find_and_create_book.mock_calls == \
|
||||||
[call('1. Mosebog', 2, 10), call('2. Mosebog', 2, 10)])
|
[call('1. Mosebog', 2, 10), call('2. Mosebog', 2, 10)]
|
||||||
self.assertDictEqual(result, {1: '1. Mosebog', 2: '2. Mosebog'})
|
assert result == {1: '1. Mosebog', 2: '2. Mosebog'}
|
||||||
|
|
||||||
def test_process_verses_stopped_import(self):
|
def test_process_verses_stopped_import(self):
|
||||||
"""
|
"""
|
||||||
@ -244,8 +244,8 @@ class TestCSVImport(TestCase):
|
|||||||
result = importer.process_verses(['Dummy Verse'], [])
|
result = importer.process_verses(['Dummy Verse'], [])
|
||||||
|
|
||||||
# THEN: get_book_name should not be called and the return value should be None
|
# THEN: get_book_name should not be called and the return value should be None
|
||||||
self.assertFalse(importer.get_book_name.called)
|
assert importer.get_book_name.called is False
|
||||||
self.assertIsNone(result)
|
assert result is None
|
||||||
|
|
||||||
def test_process_verses_successful(self):
|
def test_process_verses_successful(self):
|
||||||
"""
|
"""
|
||||||
@ -272,13 +272,13 @@ class TestCSVImport(TestCase):
|
|||||||
importer.process_verses(verses, books)
|
importer.process_verses(verses, books)
|
||||||
|
|
||||||
# THEN: create_verse is called with the test data
|
# THEN: create_verse is called with the test data
|
||||||
self.assertEqual(importer.get_book_name.mock_calls, [call(1, books), call(1, books)])
|
assert importer.get_book_name.mock_calls == [call(1, books), call(1, books)]
|
||||||
importer.get_book.assert_called_once_with('1. Mosebog')
|
importer.get_book.assert_called_once_with('1. Mosebog')
|
||||||
self.assertEqual(importer.session.commit.call_count, 2)
|
assert importer.session.commit.call_count == 2
|
||||||
self.assertEqual(importer.create_verse.mock_calls,
|
assert importer.create_verse.mock_calls == \
|
||||||
[call('1', 1, 1, 'I Begyndelsen skabte Gud Himmelen og Jorden.'),
|
[call('1', 1, 1, 'I Begyndelsen skabte Gud Himmelen og Jorden.'),
|
||||||
call('1', 1, 2, 'Og Jorden var øde og tom, og der var Mørke over Verdensdybet. '
|
call('1', 1, 2, 'Og Jorden var øde og tom, og der var Mørke over Verdensdybet. '
|
||||||
'Men Guds Ånd svævede over Vandene.')])
|
'Men Guds Ånd svævede over Vandene.')]
|
||||||
|
|
||||||
def test_do_import_invalid_language_id(self):
|
def test_do_import_invalid_language_id(self):
|
||||||
"""
|
"""
|
||||||
@ -296,7 +296,7 @@ class TestCSVImport(TestCase):
|
|||||||
|
|
||||||
# THEN: The False should be returned.
|
# THEN: The False should be returned.
|
||||||
importer.get_language.assert_called_once_with('Bible Name')
|
importer.get_language.assert_called_once_with('Bible Name')
|
||||||
self.assertFalse(result)
|
assert result is False
|
||||||
|
|
||||||
def test_do_import_success(self):
|
def test_do_import_success(self):
|
||||||
"""
|
"""
|
||||||
@ -320,11 +320,11 @@ class TestCSVImport(TestCase):
|
|||||||
|
|
||||||
# THEN: parse_csv_file should be called twice,
|
# THEN: parse_csv_file should be called twice,
|
||||||
# and True should be returned.
|
# and True should be returned.
|
||||||
self.assertEqual(importer.parse_csv_file.mock_calls,
|
assert importer.parse_csv_file.mock_calls == \
|
||||||
[call(Path('books.csv'), Book), call(Path('verses.csv'), Verse)])
|
[call(Path('books.csv'), Book), call(Path('verses.csv'), Verse)]
|
||||||
importer.process_books.assert_called_once_with(['Book 1'])
|
importer.process_books.assert_called_once_with(['Book 1'])
|
||||||
importer.process_verses.assert_called_once_with(['Verse 1'], ['Book 1'])
|
importer.process_verses.assert_called_once_with(['Verse 1'], ['Book 1'])
|
||||||
self.assertTrue(result)
|
assert result is True
|
||||||
|
|
||||||
def test_file_import(self):
|
def test_file_import(self):
|
||||||
"""
|
"""
|
||||||
@ -353,7 +353,7 @@ class TestCSVImport(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called is True
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.get_book().id, 1, verse_tag, verse_text)
|
importer.create_verse.assert_any_call(importer.get_book().id, 1, verse_tag, verse_text)
|
||||||
importer.create_book.assert_any_call('1. Mosebog', importer.get_book_ref_id_by_name(), 1)
|
importer.create_book.assert_any_call('1. Mosebog', importer.get_book_ref_id_by_name(), 1)
|
||||||
|
@ -67,7 +67,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer = OSISBible(mocked_manager, path='.', name='.', file_path=None)
|
importer = OSISBible(mocked_manager, path='.', name='.', file_path=None)
|
||||||
|
|
||||||
# THEN: The importer should be an instance of BibleDB
|
# THEN: The importer should be an instance of BibleDB
|
||||||
self.assertIsInstance(importer, BibleDB)
|
assert isinstance(importer, BibleDB)
|
||||||
|
|
||||||
def test_process_books_stop_import(self):
|
def test_process_books_stop_import(self):
|
||||||
"""
|
"""
|
||||||
@ -82,7 +82,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_books(mocked_data)
|
importer.process_books(mocked_data)
|
||||||
|
|
||||||
# THEN: find_and_create_book should not have been called
|
# THEN: find_and_create_book should not have been called
|
||||||
self.assertFalse(self.mocked_find_and_create_book.called)
|
assert self.mocked_find_and_create_book.called is False
|
||||||
|
|
||||||
def test_process_books_completes(self):
|
def test_process_books_completes(self):
|
||||||
"""
|
"""
|
||||||
@ -106,11 +106,9 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_books(mocked_data)
|
importer.process_books(mocked_data)
|
||||||
|
|
||||||
# THEN: find_and_create_book and process_books should be called with the details from the mocked books
|
# THEN: find_and_create_book and process_books should be called with the details from the mocked books
|
||||||
self.assertEqual(self.mocked_find_and_create_book.call_args_list,
|
assert self.mocked_find_and_create_book.call_args_list == [call('Name1', 2, 10), call('Name2', 2, 10)]
|
||||||
[call('Name1', 2, 10), call('Name2', 2, 10)])
|
assert mocked_process_chapters.call_args_list == [call('db_book1', book1), call('db_book2', book2)]
|
||||||
self.assertEqual(mocked_process_chapters.call_args_list,
|
assert importer.session.commit.call_count == 2
|
||||||
[call('db_book1', book1), call('db_book2', book2)])
|
|
||||||
self.assertEqual(importer.session.commit.call_count, 2)
|
|
||||||
|
|
||||||
def test_process_chapters_verse_in_chapter_verse_text(self):
|
def test_process_chapters_verse_in_chapter_verse_text(self):
|
||||||
"""
|
"""
|
||||||
@ -185,8 +183,8 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_chapters(test_book, [test_chapter])
|
importer.process_chapters(test_book, [test_chapter])
|
||||||
|
|
||||||
# THEN: neither set_current_chapter or process_verse should have been called
|
# THEN: neither set_current_chapter or process_verse should have been called
|
||||||
self.assertFalse(mocked_set_current_chapter.called)
|
assert mocked_set_current_chapter.called is False
|
||||||
self.assertFalse(mocked_process_verse.called)
|
assert mocked_process_verse.called is False
|
||||||
|
|
||||||
def test_process_chapters_milestones_chapter_sid(self):
|
def test_process_chapters_milestones_chapter_sid(self):
|
||||||
"""
|
"""
|
||||||
@ -233,7 +231,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_chapters(test_book, [test_verse])
|
importer.process_chapters(test_book, [test_verse])
|
||||||
|
|
||||||
# THEN: process_verse should have been called with the test data
|
# THEN: process_verse should have been called with the test data
|
||||||
self.assertFalse(mocked_set_current_chapter.called)
|
assert mocked_set_current_chapter.called is False
|
||||||
mocked_process_verse.assert_called_once_with(test_book, 0, test_verse, use_milestones=True)
|
mocked_process_verse.assert_called_once_with(test_book, 0, test_verse, use_milestones=True)
|
||||||
|
|
||||||
def test_process_verse_no_osis_id(self):
|
def test_process_verse_no_osis_id(self):
|
||||||
@ -252,7 +250,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_verse(test_book, 2, test_verse)
|
importer.process_verse(test_book, 2, test_verse)
|
||||||
|
|
||||||
# THEN: create_verse should not have been called
|
# THEN: create_verse should not have been called
|
||||||
self.assertFalse(self.mocked_create_verse.called)
|
assert self.mocked_create_verse.called is False
|
||||||
|
|
||||||
def test_process_verse_use_milestones_no_s_id(self):
|
def test_process_verse_use_milestones_no_s_id(self):
|
||||||
"""
|
"""
|
||||||
@ -271,7 +269,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_verse(test_book, 2, test_verse)
|
importer.process_verse(test_book, 2, test_verse)
|
||||||
|
|
||||||
# THEN: create_verse should not have been called
|
# THEN: create_verse should not have been called
|
||||||
self.assertFalse(self.mocked_create_verse.called)
|
assert self.mocked_create_verse.called is False
|
||||||
|
|
||||||
def test_process_verse_use_milestones_no_tail(self):
|
def test_process_verse_use_milestones_no_tail(self):
|
||||||
"""
|
"""
|
||||||
@ -289,7 +287,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_verse(test_book, 2, test_verse, use_milestones=True)
|
importer.process_verse(test_book, 2, test_verse, use_milestones=True)
|
||||||
|
|
||||||
# THEN: create_verse should not have been called
|
# THEN: create_verse should not have been called
|
||||||
self.assertFalse(self.mocked_create_verse.called)
|
assert self.mocked_create_verse.called is False
|
||||||
|
|
||||||
def test_process_verse_use_milestones_success(self):
|
def test_process_verse_use_milestones_success(self):
|
||||||
"""
|
"""
|
||||||
@ -327,7 +325,7 @@ class TestOsisImport(TestCase):
|
|||||||
importer.process_verse(test_book, 2, test_verse)
|
importer.process_verse(test_book, 2, test_verse)
|
||||||
|
|
||||||
# THEN: create_verse should not have been called
|
# THEN: create_verse should not have been called
|
||||||
self.assertFalse(self.mocked_create_verse.called)
|
assert self.mocked_create_verse.called is False
|
||||||
|
|
||||||
def test_process_verse_success(self):
|
def test_process_verse_success(self):
|
||||||
"""
|
"""
|
||||||
@ -363,8 +361,8 @@ class TestOsisImport(TestCase):
|
|||||||
result = importer.do_import()
|
result = importer.do_import()
|
||||||
|
|
||||||
# THEN: do_import should return False and get_language_id should have not been called
|
# THEN: do_import should return False and get_language_id should have not been called
|
||||||
self.assertFalse(result)
|
assert result is False
|
||||||
self.assertFalse(mocked_language_id.called)
|
assert mocked_language_id.called is False
|
||||||
|
|
||||||
def test_do_import_no_language(self):
|
def test_do_import_no_language(self):
|
||||||
"""
|
"""
|
||||||
@ -382,8 +380,8 @@ class TestOsisImport(TestCase):
|
|||||||
result = importer.do_import()
|
result = importer.do_import()
|
||||||
|
|
||||||
# THEN: do_import should return False and process_books should have not been called
|
# THEN: do_import should return False and process_books should have not been called
|
||||||
self.assertFalse(result)
|
assert result is False
|
||||||
self.assertFalse(mocked_process_books.called)
|
assert mocked_process_books.called is False
|
||||||
|
|
||||||
def test_do_import_completes(self):
|
def test_do_import_completes(self):
|
||||||
"""
|
"""
|
||||||
@ -401,7 +399,7 @@ class TestOsisImport(TestCase):
|
|||||||
result = importer.do_import()
|
result = importer.do_import()
|
||||||
|
|
||||||
# THEN: do_import should return True
|
# THEN: do_import should return True
|
||||||
self.assertTrue(result)
|
assert result is True
|
||||||
|
|
||||||
|
|
||||||
class TestOsisImportFileImports(TestCase):
|
class TestOsisImportFileImports(TestCase):
|
||||||
@ -442,7 +440,7 @@ class TestOsisImportFileImports(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called is True
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
||||||
|
|
||||||
@ -472,7 +470,7 @@ class TestOsisImportFileImports(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called is True
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
||||||
|
|
||||||
@ -502,7 +500,7 @@ class TestOsisImportFileImports(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
||||||
|
|
||||||
@ -532,6 +530,6 @@ class TestOsisImportFileImports(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called is True
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
importer.create_verse.assert_any_call(importer.create_book().id, 1, verse_tag, verse_text)
|
||||||
|
@ -67,7 +67,7 @@ class TestSwordImport(TestCase):
|
|||||||
importer = SwordBible(mocked_manager, path='.', name='.', file_path=None, sword_key='', sword_path='')
|
importer = SwordBible(mocked_manager, path='.', name='.', file_path=None, sword_key='', sword_path='')
|
||||||
|
|
||||||
# THEN: The importer should be an instance of BibleDB
|
# THEN: The importer should be an instance of BibleDB
|
||||||
self.assertIsInstance(importer, BibleDB)
|
assert isinstance(importer, BibleDB)
|
||||||
|
|
||||||
@patch('openlp.plugins.bibles.lib.importers.sword.SwordBible.application')
|
@patch('openlp.plugins.bibles.lib.importers.sword.SwordBible.application')
|
||||||
@patch('openlp.plugins.bibles.lib.importers.sword.modules')
|
@patch('openlp.plugins.bibles.lib.importers.sword.modules')
|
||||||
@ -106,6 +106,6 @@ class TestSwordImport(TestCase):
|
|||||||
importer.do_import()
|
importer.do_import()
|
||||||
|
|
||||||
# THEN: The create_verse() method should have been called with each verse in the file.
|
# THEN: The create_verse() method should have been called with each verse in the file.
|
||||||
self.assertTrue(importer.create_verse.called)
|
assert importer.create_verse.called is True
|
||||||
for verse_tag, verse_text in test_data['verses']:
|
for verse_tag, verse_text in test_data['verses']:
|
||||||
importer.create_verse.assert_any_call(importer.create_book().id, 1, int(verse_tag), verse_text)
|
importer.create_verse.assert_any_call(importer.create_book().id, 1, int(verse_tag), verse_text)
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
Functional tests to test the Impress class and related methods.
|
Functional tests to test the Impress class and related methods.
|
||||||
"""
|
"""
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock, patch
|
||||||
import shutil
|
import shutil
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
@ -72,6 +72,60 @@ class TestImpressController(TestCase, TestMixin):
|
|||||||
self.assertEqual('Impress', controller.name,
|
self.assertEqual('Impress', controller.name,
|
||||||
'The name of the presentation controller should be correct')
|
'The name of the presentation controller should be correct')
|
||||||
|
|
||||||
|
@patch('openlp.plugins.presentations.lib.impresscontroller.log')
|
||||||
|
def test_check_available(self, mocked_log):
|
||||||
|
"""
|
||||||
|
Test `ImpressController.check_available` on Windows
|
||||||
|
"""
|
||||||
|
# GIVEN: An instance of :class:`ImpressController`
|
||||||
|
controller = ImpressController(plugin=self.mock_plugin)
|
||||||
|
|
||||||
|
# WHEN: `check_available` is called on Windows and `get_com_servicemanager` returns None
|
||||||
|
with patch('openlp.plugins.presentations.lib.impresscontroller.is_win', return_value=True), \
|
||||||
|
patch.object(controller, 'get_com_servicemanager', return_value=None) as mocked_get_com_servicemanager:
|
||||||
|
result = controller.check_available()
|
||||||
|
|
||||||
|
# THEN: `check_available` should return False
|
||||||
|
assert mocked_get_com_servicemanager.called is True
|
||||||
|
assert result is False
|
||||||
|
|
||||||
|
@patch('openlp.plugins.presentations.lib.impresscontroller.log')
|
||||||
|
def test_check_available1(self, mocked_log):
|
||||||
|
"""
|
||||||
|
Test `ImpressController.check_available` on Windows
|
||||||
|
"""
|
||||||
|
# GIVEN: An instance of :class:`ImpressController`
|
||||||
|
controller = ImpressController(plugin=self.mock_plugin)
|
||||||
|
|
||||||
|
# WHEN: `check_available` is called on Windows and `get_com_servicemanager` returns an object
|
||||||
|
mocked_com_object = MagicMock()
|
||||||
|
with patch('openlp.plugins.presentations.lib.impresscontroller.is_win', return_value=True), \
|
||||||
|
patch.object(controller, 'get_com_servicemanager', return_value=mocked_com_object) \
|
||||||
|
as mocked_get_com_servicemanager:
|
||||||
|
result = controller.check_available()
|
||||||
|
|
||||||
|
# THEN: `check_available` should return True
|
||||||
|
assert mocked_get_com_servicemanager.called is True
|
||||||
|
assert result is True
|
||||||
|
|
||||||
|
@patch('openlp.plugins.presentations.lib.impresscontroller.log')
|
||||||
|
@patch('openlp.plugins.presentations.lib.impresscontroller.is_win', return_value=False)
|
||||||
|
def test_check_available2(self, mocked_is_win, mocked_log):
|
||||||
|
"""
|
||||||
|
Test `ImpressController.check_available` when not on Windows
|
||||||
|
"""
|
||||||
|
# GIVEN: An instance of :class:`ImpressController`
|
||||||
|
controller = ImpressController(plugin=self.mock_plugin)
|
||||||
|
|
||||||
|
# WHEN: `check_available` is called on Windows and `uno_available` is True
|
||||||
|
with patch('openlp.plugins.presentations.lib.impresscontroller.uno_available', True), \
|
||||||
|
patch.object(controller, 'get_com_servicemanager') as mocked_get_com_servicemanager:
|
||||||
|
result = controller.check_available()
|
||||||
|
|
||||||
|
# THEN: `check_available` should return True
|
||||||
|
assert mocked_get_com_servicemanager.called is False
|
||||||
|
assert result is True
|
||||||
|
|
||||||
|
|
||||||
class TestImpressDocument(TestCase):
|
class TestImpressDocument(TestCase):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user