import os import mutagen import pytest from symuid._tag_interface import Ogg # pylint: disable=protected-access @pytest.mark.parametrize("track_name", ["ogg-vorbis-empty.ogg"]) def test_get_track_path(tracks_dir_path, track_name): track_path = os.path.join(tracks_dir_path, track_name) ogg_iface = Ogg(mutagen.File(track_path)) assert track_path == ogg_iface.track_path @pytest.mark.parametrize( ("track_name", "tag_label", "expected_text"), [ ("ogg-vorbis-empty.ogg", "artist", None), ("ogg-vorbis-typical.ogg", "artist", "libvorbis encoder"), ("ogg-vorbis-typical.ogg", "comment", "some further information"), ("ogg-vorbis-typical.ogg", "com", None), ( "ogg-vorbis-typical.ogg", "symuid:uuid", "4cfe3a2a-6354-40f5-bd9b-5ccf1c6f48ba", ), ], ) def test__get_single_text(tracks_dir_path, track_name, tag_label, expected_text): ogg_iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_text == ogg_iface._get_single_text(tag_label) @pytest.mark.parametrize( ("track_name", "expected_comment"), [ ("ogg-vorbis-empty.ogg", None), ("ogg-vorbis-typical.ogg", "some further information"), ], ) def test_get_comment(tracks_dir_path, track_name, expected_comment): iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_comment == iface.get_comment() def test_set_comment(empty_ogg_vorbis_path): iface = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface.get_comment() is None iface.set_comment("latin chars") assert iface.get_comment() == "latin chars" iface.set_comment("你好!") assert iface.get_comment() == "你好!" iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface_reread.get_comment() == "你好!" tags = mutagen.File(iface.track_path).tags assert len(tags) == 1 assert tags.items()[0] == ("comment", ["你好!"]) @pytest.mark.parametrize( ("track_name", "expected_uuid"), [ ("ogg-vorbis-empty.ogg", None), ("ogg-vorbis-typical.ogg", b"L\xfe:*cT@\xf5\xbd\x9b\\\xcf\x1coH\xba"), ], ) def test_get_track_uuid(tracks_dir_path, track_name, expected_uuid): iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_uuid == iface.get_track_uuid() def test_set_track_uuid(empty_ogg_vorbis_path): iface = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface.get_track_uuid() is None uuid_a = b"s\x84@\xd8\xfe\xe8K\x80\xa7J\x13\x89\\%\xech" iface.set_track_uuid(uuid_a) assert iface.get_track_uuid() == uuid_a uuid_b = b"\xfaQ\x9a\x0eo\xa3Cp\xa1\x98c\x01\x93\xfb\xf7\xd0" iface.set_track_uuid(uuid_b) assert iface.get_track_uuid() == uuid_b iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface_reread.get_track_uuid() == uuid_b tags = mutagen.File(iface.track_path).tags assert len(tags) == 1 assert tags.items()[0] == ("symuid:uuid", ["fa519a0e-6fa3-4370-a198-630193fbf7d0"]) @pytest.mark.parametrize( ("track_name", "tag_label", "expected_int"), [ ("ogg-vorbis-empty.ogg", "tracknumber", None), ("ogg-vorbis-typical.ogg", "tracknumber", 3), ("ogg-vorbis-typical.ogg", "tracknumberr", None), ("ogg-vorbis-typical.ogg", "symuid:pcnt:player:library:1572098177", 22), ], ) def test_get_free_int(tracks_dir_path, track_name, tag_label, expected_int): ogg_iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_int == ogg_iface.get_free_int(tag_label) def test_get_free_ints(tracks_dir_path): iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, "ogg-vorbis-typical.ogg"))) assert not list(iface.get_free_ints("symuid:none")) assert list(iface.get_free_ints("tracknumber")) == [("tracknumber", 3)] assert not list(iface.get_free_ints("tracknum")) pcnt_tags = { ("symuid:pcnt:player:library:1572098177", 22), ("symuid:pcnt:player:library:1572098158", 21), } assert set(iface.get_free_ints("symuid:pcnt:player:library:1572098158")) == { ("symuid:pcnt:player:library:1572098158", 21) } assert set(iface.get_free_ints("symuid:pcnt:player:library")) == pcnt_tags assert set(iface.get_free_ints("symuid:pcnt:player")) == pcnt_tags assert set(iface.get_free_ints("symuid:pcnt")) == pcnt_tags def test_set_free_int(empty_ogg_vorbis_path): iface = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface.get_free_int("tracknumber") is None iface.set_free_int("tracknumber", 9) assert iface.get_free_int("tracknumber") == 9 iface.set_free_int("tracknumber", 5) assert iface.get_free_int("tracknumber") == 5 iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_vorbis_path)) assert iface_reread.get_free_int("tracknumber") == 5 tags = mutagen.File(iface.track_path).tags assert len(tags) == 1 assert tags.items()[0] == ("tracknumber", ["5"])