Files
picard/test/test_coverartprovider_caa.py

92 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
#
# Picard, the next-generation MusicBrainz tagger
#
# Copyright (C) 2020-2021 Laurent Monin
# Copyright (C) 2020-2021 Philipp Wolfer
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
from test.picardtestcase import PicardTestCase
from picard.coverart.providers.caa import caa_url_fallback_list
class CoverArtImageProviderCaaTest(PicardTestCase):
def test_caa_url_fallback_list(self):
def do_tests(sizes, expectations):
# we create a dummy url named after matching size
thumbnails = {size: "url %s" % size for size in sizes}
msgfmt = "for size %s, with sizes %r, got %r, expected %r"
for size, expect in expectations.items():
result = [thumbnail.url for thumbnail in caa_url_fallback_list(size, thumbnails)]
self.assertEqual(result, expect, msg=msgfmt % (size, sizes, result, expect))
# For historical reasons, caa web service returns 2 identical urls,
# for 2 different keys (250/small, 500/large)
# Here is an example of the json relevant part:
# "thumbnails": {
# "250": "http://coverartarchive.org/release/d20247ad-940e-486d-948f-be4c17024ab9/24885128253-250.jpg",
# "500": "http://coverartarchive.org/release/d20247ad-940e-486d-948f-be4c17024ab9/24885128253-500.jpg",
# "1200": "http://coverartarchive.org/release/d20247ad-940e-486d-948f-be4c17024ab9/24885128253-1200.jpg",
# "large": "http://coverartarchive.org/release/d20247ad-940e-486d-948f-be4c17024ab9/24885128253-500.jpg",
# "small": "http://coverartarchive.org/release/d20247ad-940e-486d-948f-be4c17024ab9/24885128253-250.jpg"
# },
sizes = ("250", "500", "1200", "large", "small")
expectations = {
50: [],
250: ['url 250'],
400: ['url 250'],
500: ['url 500', 'url 250'],
600: ['url 500', 'url 250'],
1200: ['url 1200', 'url 500', 'url 250'],
1500: ['url 1200', 'url 500', 'url 250'],
}
do_tests(sizes, expectations)
# Some older releases have no 1200px thumbnail
sizes = ("250", "500", "large", "small")
expectations = {
50: [],
250: ['url 250'],
400: ['url 250'],
500: ['url 500', 'url 250'],
600: ['url 500', 'url 250'],
1200: ['url 500', 'url 250'],
1500: ['url 500', 'url 250'],
}
do_tests(sizes, expectations)
# In the future, large and small might be removed or new size added
# test if we can handle that (through size aliases)
sizes = ("small", "large", "1200", "2000", "unknownsize")
expectations = {
50: [],
250: ['url small'],
400: ['url small'],
500: ['url large', 'url small'],
600: ['url large', 'url small'],
1200: ['url 1200', 'url large', 'url small'],
1500: ['url 1200', 'url large', 'url small'],
}
do_tests(sizes, expectations)
with self.assertRaises(TypeError):
caa_url_fallback_list("not_an_integer", {"250": "url 250"})
with self.assertRaises(AttributeError):
caa_url_fallback_list(250, 666)