コード例 #1
0
    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.')
コード例 #2
0
    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)
コード例 #3
0
ファイル: test_ewimport.py プロジェクト: crossroadchurch/paul
    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)
コード例 #4
0
ファイル: test_ewimport.py プロジェクト: crossroadchurch/paul
    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.')
コード例 #5
0
ファイル: test_ewimport.py プロジェクト: simhnna/openlp
    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.'
コード例 #6
0
    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.')
コード例 #7
0
    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.')
コード例 #8
0
ファイル: test_ewimport.py プロジェクト: crossroadchurch/paul
    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.')
コード例 #9
0
    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()
コード例 #10
0
    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')
コード例 #11
0
    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')
コード例 #12
0
ファイル: test_ewimport.py プロジェクト: crossroadchurch/paul
    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')
コード例 #13
0
ファイル: test_ewimport.py プロジェクト: crossroadchurch/paul
    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')
コード例 #14
0
    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)