From 1815d083925846ff1e7b5223d2b00f1bd9f7efbb Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Mon, 14 Feb 2022 22:52:00 +0100 Subject: [PATCH] artresizer: fix image comparison test Since the ImageMagick based comparison is now abstracted via ArtResizer, it becomes a little more involved to mock it for testing. --- beets/art.py | 13 +++++++++++-- test/test_embedart.py | 21 ++++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/beets/art.py b/beets/art.py index e7f18ee1d..6e0a5f82b 100644 --- a/beets/art.py +++ b/beets/art.py @@ -121,7 +121,13 @@ def resize_image(log, imagepath, maxwidth, quality): return imagepath -def check_art_similarity(log, item, imagepath, compare_threshold): +def check_art_similarity( + log, + item, + imagepath, + compare_threshold, + artresizer=None, +): """A boolean indicating if an image is similar to embedded item art. If no embedded art exists, always return `True`. If the comparison fails @@ -135,7 +141,10 @@ def check_art_similarity(log, item, imagepath, compare_threshold): if not art: return True - return ArtResizer.shared.compare(art, imagepath, compare_threshold) + if artresizer is None: + artresizer = ArtResizer.shared + + return artresizer.compare(art, imagepath, compare_threshold) def extract(log, outpath, item): diff --git a/test/test_embedart.py b/test/test_embedart.py index b02989175..0fed08f98 100644 --- a/test/test_embedart.py +++ b/test/test_embedart.py @@ -24,7 +24,7 @@ from test.helper import TestHelper from mediafile import MediaFile from beets import config, logging, ui -from beets.util import syspath, displayable_path +from beets.util import artresizer, syspath, displayable_path from beets.util.artresizer import ArtResizer from beets import art @@ -216,16 +216,31 @@ class EmbedartCliTest(_common.TestCase, TestHelper): self.assertEqual(mediafile.images[0].data, self.image_data) +class DummyArtResizer(ArtResizer): + """An `ArtResizer` which pretends that ImageMagick is available, and has + a sufficiently recent version to support image comparison. + """ + @staticmethod + def _check_method(): + return artresizer.IMAGEMAGICK, (7, 0, 0), True + + @patch('beets.util.artresizer.subprocess') @patch('beets.art.extract') class ArtSimilarityTest(unittest.TestCase): def setUp(self): self.item = _common.item() self.log = logging.getLogger('beets.embedart') + self.artresizer = DummyArtResizer() def _similarity(self, threshold): - return art.check_art_similarity(self.log, self.item, b'path', - threshold) + return art.check_art_similarity( + self.log, + self.item, + b'path', + threshold, + artresizer=self.artresizer, + ) def _popen(self, status=0, stdout="", stderr=""): """Create a mock `Popen` object."""