From c82ef8b0f1cd7fa4ead6223d7aa2e2b1577e08cd Mon Sep 17 00:00:00 2001 From: Laurent Monin Date: Fri, 2 Jun 2023 00:15:50 +0200 Subject: [PATCH] Extensively test _locales_from_aliases() - use a stripped down version of aliases (unused fields were removed) - 100% coverage - correctness of results has to be reviewed --- test/test_mbjson.py | 100 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/test/test_mbjson.py b/test/test_mbjson.py index 6fb61f545..4f643a64a 100644 --- a/test/test_mbjson.py +++ b/test/test_mbjson.py @@ -33,7 +33,13 @@ from test.picardtestcase import ( from picard import config from picard.album import Album +from picard.const import ( + ALIAS_TYPE_ARTIST_NAME_ID, + ALIAS_TYPE_LEGAL_NAME_ID, + ALIAS_TYPE_SEARCH_HINT_ID, +) from picard.mbjson import ( + _locales_from_aliases, _node_skip_empty_iter, _translate_artist_node, artist_to_metadata, @@ -598,6 +604,100 @@ class ArtistTranslationArabicExceptionsTest(MBJSONTest): self.assertEqual(artist_name, 'محمد منير') +class TestAliasesLocales(PicardTestCase): + + def setUp(self): + self.maxDiff = None + + self.aliases = [ + { + "name": "Shearan", + "sort-name": "Shearan", + "primary": None, + "locale": None, + "type-id": ALIAS_TYPE_SEARCH_HINT_ID, + }, + { + "primary": True, + "name": "Ed Sheeran (en)", + "sort-name": "Sheeran, Ed", + "type-id": ALIAS_TYPE_ARTIST_NAME_ID, + "locale": "en", + }, + { + "primary": True, + "name": "Ed Sheeran (en_CA)", + "sort-name": "Sheeran, Ed", + "type-id": ALIAS_TYPE_ARTIST_NAME_ID, + "locale": "en_CA", + }, + ] + + def test_1(self): + expect_full = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed')), 'en_CA': (0.8, ('Ed Sheeran (en_CA)', 'Sheeran, Ed'))} + expect_root = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + def test_2(self): + self.aliases[2]['type-id'] = ALIAS_TYPE_LEGAL_NAME_ID + + expect_full = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed')), 'en_CA': (0.65, ('Ed Sheeran (en_CA)', 'Sheeran, Ed'))} + expect_root = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + def test_3(self): + self.aliases[0]['primary'] = True + del self.aliases[0]['locale'] + + expect_full = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed')), 'en_CA': (0.8, ('Ed Sheeran (en_CA)', 'Sheeran, Ed'))} + expect_root = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + def test_4(self): + self.aliases[2]['type-id'] = ALIAS_TYPE_SEARCH_HINT_ID + + expect_full = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed')), 'en_CA': (0.4, ('Ed Sheeran (en_CA)', 'Sheeran, Ed'))} + expect_root = {'en': (0.8, ('Ed Sheeran (en)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + def test_5(self): + self.aliases[1]['locale'] = 'en_US' + self.aliases[1]['name'] = 'Ed Sheeran (en_US)' + + expect_full = {'en_US': (0.8, ('Ed Sheeran (en_US)', 'Sheeran, Ed')), 'en_CA': (0.8, ('Ed Sheeran (en_CA)', 'Sheeran, Ed'))} + expect_root = {'en': (0.6, ('Ed Sheeran (en_US)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + def test_6(self): + self.aliases[2]['locale'] = 'en' + self.aliases[2]['name'] = 'Ed Sheeran (en2)' + self.aliases[2]['type-id'] = ALIAS_TYPE_ARTIST_NAME_ID + self.aliases[1]['type-id'] = ALIAS_TYPE_LEGAL_NAME_ID + self.aliases[1]['name'] = 'Ed Sheeran (en1)' + + expect_full = {'en': (0.8, ('Ed Sheeran (en2)', 'Sheeran, Ed'))} + expect_root = {'en': (0.8, ('Ed Sheeran (en2)', 'Sheeran, Ed'))} + + full_locales, root_locales = _locales_from_aliases(self.aliases) + self.assertDictEqual(expect_full, full_locales) + self.assertDictEqual(expect_root, root_locales) + + class ReleaseGroupTest(MBJSONTest): filename = 'release_group.json'