forked from openlp/openlp
Add proper error messages to EasyWorship import.
Also make sure that Songs.db (lowercase ending) is also being recognized. bzr-revno: 2394 Fixes: https://launchpad.net/bugs/1326664
This commit is contained in:
commit
d61111ab89
@ -200,11 +200,20 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
Import the songs from the database
|
Import the songs from the database
|
||||||
"""
|
"""
|
||||||
# Open the DB and MB files if they exist
|
# Open the DB and MB files if they exist
|
||||||
import_source_mb = self.import_source.replace('.DB', '.MB')
|
import_source_mb = self.import_source.replace('.DB', '.MB').replace('.db', '.mb')
|
||||||
if not os.path.isfile(self.import_source) or not os.path.isfile(import_source_mb):
|
if not os.path.isfile(self.import_source):
|
||||||
|
self.log_error(self.import_source, translate('SongsPlugin.EasyWorshipSongImport',
|
||||||
|
'This file does not exist.'))
|
||||||
|
return
|
||||||
|
if not os.path.isfile(import_source_mb):
|
||||||
|
self.log_error(self.import_source, translate('SongsPlugin.EasyWorshipSongImport',
|
||||||
|
'Could not find the "Songs.MB" file. It must be in the same '
|
||||||
|
'folder as the "Songs.DB" file.'))
|
||||||
return
|
return
|
||||||
db_size = os.path.getsize(self.import_source)
|
db_size = os.path.getsize(self.import_source)
|
||||||
if db_size < 0x800:
|
if db_size < 0x800:
|
||||||
|
self.log_error(self.import_source, translate('SongsPlugin.EasyWorshipSongImport',
|
||||||
|
'This file is not a valid EasyWorship database.'))
|
||||||
return
|
return
|
||||||
db_file = open(self.import_source, 'rb')
|
db_file = open(self.import_source, 'rb')
|
||||||
self.memo_file = open(import_source_mb, 'rb')
|
self.memo_file = open(import_source_mb, 'rb')
|
||||||
@ -213,6 +222,8 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
if header_size != 0x800 or block_size < 1 or block_size > 4:
|
if header_size != 0x800 or block_size < 1 or block_size > 4:
|
||||||
db_file.close()
|
db_file.close()
|
||||||
self.memo_file.close()
|
self.memo_file.close()
|
||||||
|
self.log_error(self.import_source, translate('SongsPlugin.EasyWorshipSongImport',
|
||||||
|
'This file is not a valid EasyWorship database.'))
|
||||||
return
|
return
|
||||||
# Take a stab at how text is encoded
|
# Take a stab at how text is encoded
|
||||||
self.encoding = 'cp1252'
|
self.encoding = 'cp1252'
|
||||||
@ -240,6 +251,8 @@ class EasyWorshipSongImport(SongImport):
|
|||||||
self.encoding = 'cp874'
|
self.encoding = 'cp874'
|
||||||
self.encoding = retrieve_windows_encoding(self.encoding)
|
self.encoding = retrieve_windows_encoding(self.encoding)
|
||||||
if not self.encoding:
|
if not self.encoding:
|
||||||
|
self.log_error(self.import_source, translate('SongsPlugin.EasyWorshipSongImport',
|
||||||
|
'Could not retrieve encoding.'))
|
||||||
return
|
return
|
||||||
# Read the field description information
|
# Read the field description information
|
||||||
db_file.seek(120)
|
db_file.seek(120)
|
||||||
|
@ -314,6 +314,26 @@ class TestEasyWorshipSongImport(TestCase):
|
|||||||
mocked_os_path.isfile.assert_any_call('Songs.DB')
|
mocked_os_path.isfile.assert_any_call('Songs.DB')
|
||||||
mocked_os_path.isfile.assert_any_call('Songs.MB')
|
mocked_os_path.isfile.assert_any_call('Songs.MB')
|
||||||
|
|
||||||
|
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.ewimport.SongImport'), \
|
||||||
|
patch('openlp.plugins.songs.lib.ewimport.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_database_validity_test(self):
|
def do_import_database_validity_test(self):
|
||||||
"""
|
"""
|
||||||
Test the :mod:`do_import` module handles invalid database files correctly
|
Test the :mod:`do_import` module handles invalid database files correctly
|
||||||
|
Loading…
Reference in New Issue
Block a user