def test_do_import_memo_validty(self): """ Test the :mod:`do_import` module handles invalid memo files correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path, \ patch('builtins.open') as mocked_open, \ patch('openlp.plugins.songs.lib.importers.easyworship.struct') as mocked_struct: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True mocked_os_path.getsize.return_value = 0x800 importer.import_source = 'Songs.DB' # WHEN: Unpacking first 35 bytes of Memo file struct_unpack_return_values = [(0, 0x700, 2, 0, 0), (0, 0x800, 0, 0, 0), (0, 0x800, 5, 0, 0)] mocked_struct.unpack.side_effect = struct_unpack_return_values # THEN: do_import should return None having called closed the open files db and memo files. for effect in struct_unpack_return_values: self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') self.assertEqual(mocked_open().close.call_count, 2, 'The open db and memo files should have been closed') mocked_open().close.reset_mock() self.assertIs(mocked_open().seek.called, False, 'db_file.seek should not have been called.')
def test_code_page_to_encoding(self): """ Test the :mod:`do_import` converts the code page to the encoding correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path, \ patch('builtins.open'), patch('openlp.plugins.songs.lib.importers.easyworship.struct') as mocked_struct, \ patch('openlp.plugins.songs.lib.importers.easyworship.retrieve_windows_encoding') as \ mocked_retrieve_windows_encoding: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True mocked_os_path.getsize.return_value = 0x800 importer.import_source = 'Songs.DB' # WHEN: Unpacking the code page for code_page, encoding in CODE_PAGE_MAPPINGS: struct_unpack_return_values = [(0, 0x800, 2, 0, 0), (code_page, )] mocked_struct.unpack.side_effect = struct_unpack_return_values mocked_retrieve_windows_encoding.return_value = False # THEN: do_import should return None having called retrieve_windows_encoding with the correct encoding. self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') mocked_retrieve_windows_encoding.assert_any_call(encoding)
def code_page_to_encoding_test(self): """ Test the :mod:`do_import` converts the code page to the encoding correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path, \ patch('builtins.open'), patch('openlp.plugins.songs.lib.importers.easyworship.struct') as mocked_struct, \ patch('openlp.plugins.songs.lib.importers.easyworship.retrieve_windows_encoding') as \ mocked_retrieve_windows_encoding: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True mocked_os_path.getsize.return_value = 0x800 importer.import_source = 'Songs.DB' # WHEN: Unpacking the code page for code_page, encoding in CODE_PAGE_MAPPINGS: struct_unpack_return_values = [(0, 0x800, 2, 0, 0), (code_page, )] mocked_struct.unpack.side_effect = struct_unpack_return_values mocked_retrieve_windows_encoding.return_value = False # THEN: do_import should return None having called retrieve_windows_encoding with the correct encoding. self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') mocked_retrieve_windows_encoding.assert_call(encoding)
def do_import_memo_validty_test(self): """ Test the :mod:`do_import` module handles invalid memo files correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path, \ patch('builtins.open') as mocked_open, \ patch('openlp.plugins.songs.lib.importers.easyworship.struct') as mocked_struct: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True mocked_os_path.getsize.return_value = 0x800 importer.import_source = 'Songs.DB' # WHEN: Unpacking first 35 bytes of Memo file struct_unpack_return_values = [(0, 0x700, 2, 0, 0), (0, 0x800, 0, 0, 0), (0, 0x800, 5, 0, 0)] mocked_struct.unpack.side_effect = struct_unpack_return_values # THEN: do_import should return None having called closed the open files db and memo files. for effect in struct_unpack_return_values: self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') self.assertEqual(mocked_open().close.call_count, 2, 'The open db and memo files should have been closed') mocked_open().close.reset_mock() self.assertIs(mocked_open().seek.called, False, 'db_file.seek should not have been called.')
def test_do_import_memo_validty(self, mocked_struct, mocked_open, mocked_stat, mocked_is_file, MockSongImport): """ Test the :mod:`do_import` module handles invalid memo files correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, file_paths=[]) importer.import_source = 'Songs.DB' # WHEN: Unpacking first 35 bytes of Memo file struct_unpack_return_values = [(0, 0x700, 2, 0, 0), (0, 0x800, 0, 0, 0), (0, 0x800, 5, 0, 0)] mocked_struct.unpack.side_effect = struct_unpack_return_values # THEN: do_import should return None having called closed the open files db and memo files. for effect in struct_unpack_return_values: assert importer.do_import( ) is None, 'do_import should return None when db_size is less than 0x800' assert mocked_open( ).close.call_count == 2, 'The open db and memo files should have been closed' mocked_open().close.reset_mock() assert mocked_open( ).seek.called is False, 'db_file.seek should not have been called.'
def test_do_import_database_validity(self, mocked_stat, mocked_is_file, MockSongImport): """ Test the :mod:`do_import` module handles invalid database files correctly """ # GIVEN: A mocked out SongImport class, os.path and a mocked out "manager" mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, file_paths=[]) importer.import_source = 'Songs.DB' # WHEN: DB file size is less than 0x800 mocked_stat.return_value.st_size = 0x7FF # THEN: do_import should return None having called Path.stat() assert importer.do_import() is None, 'do_import should return None when db_size is less than 0x800' mocked_stat.assert_called_once_with()
def test_do_import_source_invalid(self, mocked_is_file, MockSongImport): """ Test the :mod:`do_import` module produces an error when Songs.MB not found. """ # GIVEN: A mocked out SongImport class, a mocked out "manager" mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, file_paths=[]) with patch.object(importer, 'log_error') as mocked_log_error: # WHEN: do_import is supplied with an import source (Songs.MB missing) importer.import_source = 'Songs.DB' importer.do_import() # THEN: do_import should have logged an error that the Songs.MB file could not be found. mocked_log_error.assert_any_call(importer.import_source, 'Could not find the "Songs.MB" file. It must be in the same folder as ' 'the "Songs.DB" file.')
def test_do_import_database_validity(self): """ Test the :mod:`do_import` module handles invalid database files correctly """ # GIVEN: A mocked out SongImport class, os.path and a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True importer.import_source = 'Songs.DB' # WHEN: DB file size is less than 0x800 mocked_os_path.getsize.return_value = 0x7FF # THEN: do_import should return None having called os.path.isfile self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') mocked_os_path.getsize.assert_any_call('Songs.DB')
def test_do_import_source(self): """ Test the :mod:`do_import` module opens the correct files """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.side_effect = [True, False] # WHEN: Supplied with an import source importer.import_source = 'Songs.DB' # THEN: do_import should return None having called os.path.isfile self.assertIsNone(importer.do_import(), 'do_import should return None') mocked_os_path.isfile.assert_any_call('Songs.DB') mocked_os_path.isfile.assert_any_call('Songs.MB')
def do_import_database_validity_test(self): """ Test the :mod:`do_import` module handles invalid database files correctly """ # GIVEN: A mocked out SongImport class, os.path and a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.return_value = True importer.import_source = 'Songs.DB' # WHEN: DB file size is less than 0x800 mocked_os_path.getsize.return_value = 0x7FF # THEN: do_import should return None having called os.path.isfile self.assertIsNone(importer.do_import(), 'do_import should return None when db_size is less than 0x800') mocked_os_path.getsize.assert_any_call('Songs.DB')
def do_import_source_test(self): """ Test the :mod:`do_import` module opens the correct files """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) mocked_os_path.isfile.side_effect = [True, False] # WHEN: Supplied with an import source importer.import_source = 'Songs.DB' # THEN: do_import should return None having called os.path.isfile self.assertIsNone(importer.do_import(), 'do_import should return None') mocked_os_path.isfile.assert_any_call('Songs.DB') mocked_os_path.isfile.assert_any_call('Songs.MB')
def test_code_page_to_encoding(self, mocked_retrieve_windows_encoding, mocked_struct, mocked_open, mocked_path_open, mocked_path_stat, mocked_path_is_file, MockSongImport): """ Test the :mod:`do_import` converts the code page to the encoding correctly """ # GIVEN: A mocked out SongImport class, a mocked out "manager" mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, file_paths=[]) importer.import_source = 'Songs.DB' # WHEN: Unpacking the code page for code_page, encoding in CODE_PAGE_MAPPINGS: struct_unpack_return_values = [(0, 0x800, 2, 0, 0), (code_page, )] mocked_struct.unpack.side_effect = struct_unpack_return_values mocked_retrieve_windows_encoding.return_value = False # THEN: do_import should return None having called retrieve_windows_encoding with the correct encoding. assert importer.do_import() is None, 'do_import should return None when db_size is less than 0x800' mocked_retrieve_windows_encoding.assert_any_call(encoding)
def test_do_import_source_invalid(self): """ Test the :mod:`do_import` module produces an error when Songs.MB not found. """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) importer.log_error = MagicMock() mocked_os_path.isfile.side_effect = [True, False] # WHEN: do_import is supplied with an import source (Songs.MB missing) importer.import_source = 'Songs.DB' importer.do_import() # THEN: do_import should have logged an error that the Songs.MB file could not be found. importer.log_error.assert_any_call(importer.import_source, 'Could not find the "Songs.MB" file. It must be ' 'in the same folder as the "Songs.DB" file.')
def do_import_source_invalid_test(self): """ Test the :mod:`do_import` module produces an error when Songs.MB not found. """ # GIVEN: A mocked out SongImport class, a mocked out "manager" with patch('openlp.plugins.songs.lib.importers.easyworship.SongImport'), \ patch('openlp.plugins.songs.lib.importers.easyworship.os.path') as mocked_os_path: mocked_manager = MagicMock() importer = EasyWorshipSongImport(mocked_manager, filenames=[]) importer.log_error = MagicMock() mocked_os_path.isfile.side_effect = [True, False] # WHEN: do_import is supplied with an import source (Songs.MB missing) importer.import_source = 'Songs.DB' importer.do_import() # THEN: do_import should have logged an error that the Songs.MB file could not be found. importer.log_error.assert_any_call(importer.import_source, 'Could not find the "Songs.MB" file. It must be ' 'in the same folder as the "Songs.DB" file.')