"""Test metadata helpers.""" from ddex_ingester_common.constants.language_codes import ( PRODUCT_LANGUAGE_CODE, TRACK_LANGUAGE_CODE ) from ddex_ingester_common.helpers.metadata import ( format_lyrics, format_pline, get_country_id, get_language_id, get_us_publishing_obligation, process_language_code, remove_non_alphanumeric_characters ) import pytest def test_format_pline(): """Test format_pline can remove (P).""" pline = '(P) 2020 Epic Records, a division of Sony Music Entertainment' expected_output = \ '2020 Epic Records, a division of Sony Music Entertainment' output = format_pline(pline) assert output == expected_output def test_format_pline_nothing(): """Test format_pline can remove nothing.""" pline = '2020 Epic Records, a division of Sony Music Entertainment' expected_output = \ '2020 Epic Records, a division of Sony Music Entertainment' output = format_pline(pline) assert output == expected_output def test_format_pline_symbol(): """Test format_pline can remove ℗.""" pline = '℗ 2020 Epic Records, a division of Sony Music Entertainment' expected_output = \ '2020 Epic Records, a division of Sony Music Entertainment' output = format_pline(pline) assert output == expected_output @pytest.mark.parametrize('pline', [ '2021 Sunset to Sound Inc. This recording has whitespace issues', '2021 Sunset to Sound Inc. This recording has whitespace issues', '(P) 2021 Sunset to Sound Inc. This recording has whitespace issues', '℗ 2021 Sunset to Sound Inc. This recording has whitespace issues', ' (P) 2021 Sunset to Sound Inc. This recording has whitespace issues', ' ℗ 2021 Sunset to Sound Inc. This recording has whitespace issues' ]) def test_format_pline_combine_whitespace_handling(pline): """Test format_pline can handle combining whitespace.""" expected_output = \ '2021 Sunset to Sound Inc. This recording has whitespace issues' output = format_pline(pline) assert output == expected_output def test_remove_non_alphanumeric_characters(): """Test remove_non_alphanumeric_characters.""" test_data = 'This \t\nContains-_.:Invalid!?@´çCharacters' result = remove_non_alphanumeric_characters(test_data) assert result == 'ThisContainsInvalidCharacters' @pytest.mark.parametrize('language_code, expected_result', [ ('aa', 'AAR'), ('EL-LATN', 'GRE'), ('AB-LATN', 'ABK'), ('ZU-LATN', 'ZUL'), ('COR-LATN', 'COR'), ('MUL', 'UND'), ('QWE', 'UND'), ]) def test_process_language_code(language_code, expected_result): """Test process_language_code.""" assert process_language_code(language_code, '') == expected_result def test_process_language_code_track(): """Test process_language_code for track specific mappings.""" assert process_language_code('cmn-hant', TRACK_LANGUAGE_CODE) == 'CHI' def test_process_language_code_product(): """Test process_language_code for product specific mappings.""" assert process_language_code('cmn-hant', PRODUCT_LANGUAGE_CODE) == \ 'cmn-Hant' def test_get_country_id(): """Test get_country_id.""" assert get_country_id('US') == 1 def test_get_country_id_non_existant(): """Test get_country_id with a non existant country_code.""" assert get_country_id('AA') is None def test_get_us_publishing_obligation(): """Test get_us_publishing_obligation.""" assert get_us_publishing_obligation('public domain') == 'PUBLIC_DOMAIN' def test_get_us_publishing_obligation_non_existant(): """Test get_us_publishing_obligation with a non existant input.""" assert get_us_publishing_obligation('AA') is None def test_format_lyrics(): """Test format_lyrics.""" lyrics = '' expected_lyrics = 'Very cool lyrics...' assert format_lyrics(lyrics) == expected_lyrics def test_get_language_id(): """Test get_language_id returns stripped string.""" language_code = 'en' result = get_language_id(language_code) assert result == 12 def test_get_language_id_with_latn_suffix_language(): """Test get_language_id returns stripped string.""" language_code = 'he-Latn' result = get_language_id(language_code) assert result == 18