From f8084059ba6429db1a5f7af618adc2626a9737c1 Mon Sep 17 00:00:00 2001 From: Tomas Groth Date: Wed, 18 Mar 2015 22:04:30 +0000 Subject: [PATCH] Added test + small fixes. --- openlp/core/ui/media/vlcplayer.py | 4 ++- openlp/plugins/presentations/lib/mediaitem.py | 4 +-- .../presentations/test_mediaitem.py | 28 +++++++++++++++++-- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/media/vlcplayer.py b/openlp/core/ui/media/vlcplayer.py index 9932d3901..535f23e8b 100644 --- a/openlp/core/ui/media/vlcplayer.py +++ b/openlp/core/ui/media/vlcplayer.py @@ -27,6 +27,7 @@ from distutils.version import LooseVersion import logging import os import threading +import sys from PyQt4 import QtGui @@ -62,7 +63,8 @@ if VLC_AVAILABLE: if LooseVersion(VERSION.split()[0]) < LooseVersion('1.1.0'): VLC_AVAILABLE = False log.debug('VLC could not be loaded, because the vlc version is too old: %s' % VERSION) - if VLC_AVAILABLE and is_linux(): + # On linux we need to initialise X threads, but not when running tests. + if VLC_AVAILABLE and is_linux() and 'nose' not in sys.argv[0]: import ctypes try: x11 = ctypes.cdll.LoadLibrary('libX11.so') diff --git a/openlp/plugins/presentations/lib/mediaitem.py b/openlp/plugins/presentations/lib/mediaitem.py index fa6b3d377..63fd20ba5 100644 --- a/openlp/plugins/presentations/lib/mediaitem.py +++ b/openlp/plugins/presentations/lib/mediaitem.py @@ -245,8 +245,8 @@ class PresentationMediaItem(MediaManagerItem): doc = self.controllers[cidx].add_document(filepath) if clean_for_update: thumb_path = doc.get_thumbnail_path(1, True) - if not thumb_path or (os.path.exists(filepath) - and os.path.getmtime(thumb_path) < os.path.getmtime(filepath)): + if not thumb_path or not os.path.exists(filepath) or os.path.getmtime( + thumb_path) < os.path.getmtime(filepath): doc.presentation_deleted() else: doc.presentation_deleted() diff --git a/tests/functional/openlp_plugins/presentations/test_mediaitem.py b/tests/functional/openlp_plugins/presentations/test_mediaitem.py index 8de65e0fe..72584e571 100644 --- a/tests/functional/openlp_plugins/presentations/test_mediaitem.py +++ b/tests/functional/openlp_plugins/presentations/test_mediaitem.py @@ -87,7 +87,7 @@ class TestMediaItem(TestCase, TestMixin): def clean_up_thumbnails_test(self): """ - Test that the clean_up_thumbnails method works as expected. + Test that the clean_up_thumbnails method works as expected when files exists. """ # GIVEN: A mocked controller, and mocked os.path.getmtime mocked_controller = MagicMock() @@ -98,8 +98,10 @@ class TestMediaItem(TestCase, TestMixin): 'Mocked': mocked_controller } presentation_file = 'file.tmp' - with patch('openlp.plugins.presentations.lib.mediaitem.os.path.getmtime') as mocked_getmtime: + with patch('openlp.plugins.presentations.lib.mediaitem.os.path.getmtime') as mocked_getmtime, \ + patch('openlp.plugins.presentations.lib.mediaitem.os.path.exists') as mocked_exists: mocked_getmtime.side_effect = [100, 200] + mocked_exists.return_value = True # WHEN: calling clean_up_thumbnails self.media_item.clean_up_thumbnails(presentation_file, True) @@ -107,3 +109,25 @@ class TestMediaItem(TestCase, TestMixin): # THEN: doc.presentation_deleted should have been called since the thumbnails mtime will be greater than # the presentation_file's mtime. mocked_doc.assert_has_calls([call.get_thumbnail_path(1, True), call.presentation_deleted()], True) + + def clean_up_thumbnails_missing_file_test(self): + """ + Test that the clean_up_thumbnails method works as expected when file is missing. + """ + # GIVEN: A mocked controller, and mocked os.path.exists + mocked_controller = MagicMock() + mocked_doc = MagicMock() + mocked_controller.add_document.return_value = mocked_doc + mocked_controller.supports = ['tmp'] + self.media_item.controllers = { + 'Mocked': mocked_controller + } + presentation_file = 'file.tmp' + with patch('openlp.plugins.presentations.lib.mediaitem.os.path.exists') as mocked_exists: + mocked_exists.return_value = False + + # WHEN: calling clean_up_thumbnails + self.media_item.clean_up_thumbnails(presentation_file, True) + + # THEN: doc.presentation_deleted should have been called since the presentation file did not exists. + mocked_doc.assert_has_calls([call.get_thumbnail_path(1, True), call.presentation_deleted()], True)