import os import mutagen import pytest from symuid._tag_interface import Ogg # pylint: disable=protected-access @pytest.mark.parametrize("track_name", ["ogg-opus-empty.opus"]) def test_get_track_path(tracks_dir_path, track_name): track_path = os.path.join(tracks_dir_path, track_name) iface = Ogg(mutagen.File(track_path)) assert track_path == iface.track_path @pytest.mark.parametrize( ("track_name", "tag_label", "expected_text"), [ ("ogg-opus-empty.opus", "artist", None), ("ogg-opus-typical.opus", "artist", "some artist"), ("ogg-opus-typical.opus", "comment", "some comment"), ("ogg-opus-typical.opus", "com", None), ( "ogg-opus-typical.opus", "symuid:uuid", "613ea4ac-a4cf-4026-8e99-1904b2bb5cd0", ), ], ) def test__get_single_text(tracks_dir_path, track_name, tag_label, expected_text): iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_text == iface._get_single_text(tag_label) @pytest.mark.parametrize( ("track_name", "expected_comment"), [("ogg-opus-empty.opus", None), ("ogg-opus-typical.opus", "some comment"),], ) 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_opus_path): iface = Ogg(mutagen.File(empty_ogg_opus_path)) assert iface.get_comment() is None iface.set_comment("latin") assert iface.get_comment() == "latin" iface.set_comment("你好") assert iface.get_comment() == "你好" iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_opus_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-opus-empty.opus", None), ( "ogg-opus-typical.opus", b"a>\xa4\xac\xa4\xcf@&\x8e\x99\x19\x04\xb2\xbb\\\xd0", ), ], ) 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_opus_path): iface = Ogg(mutagen.File(empty_ogg_opus_path)) assert iface.get_track_uuid() is None uuid_a = b"\x9e\xa7\xc4\xf0\xda\xecE\xb7\xab\x9a\xba\x9f\xc6\xaa\xc0S" iface.set_track_uuid(uuid_a) assert iface.get_track_uuid() == uuid_a uuid_b = b"_\xa0\xd7\xc0\xf3\x15F\x14\xbe\xe4idM=\x80\xb3" iface.set_track_uuid(uuid_b) assert iface.get_track_uuid() == uuid_b iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_opus_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", ["5fa0d7c0-f315-4614-bee4-69644d3d80b3"]) @pytest.mark.parametrize( ("track_name", "tag_label", "expected_int"), [ ("ogg-opus-empty.opus", "tracknumber", None), ("ogg-opus-typical.opus", "tracknumber", 21), ("ogg-opus-typical.opus", "tracknumberr", None), ("ogg-opus-typical.opus", "symuid:pcnt:player:library:1572098177", 43), ], ) def test_get_free_int(tracks_dir_path, track_name, tag_label, expected_int): iface = Ogg(mutagen.File(os.path.join(tracks_dir_path, track_name))) assert expected_int == 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-opus-typical.opus"))) assert not list(iface.get_free_ints("symuid:none")) assert list(iface.get_free_ints("tracknumber")) == [("tracknumber", 21)] assert not list(iface.get_free_ints("tracknum")) pcnt_tags = { ("symuid:pcnt:player:library:1572098158", 42), ("symuid:pcnt:player:library:1572098177", 43), } 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 assert set(iface.get_free_ints("symuid:pcnt:player:library:1572098158")) == { ("symuid:pcnt:player:library:1572098158", 42) } def test_set_free_int(empty_ogg_opus_path): iface = Ogg(mutagen.File(empty_ogg_opus_path)) assert iface.get_free_int("tracknumber") is None iface.set_free_int("tracknumber", 7) assert iface.get_free_int("tracknumber") == 7 iface.set_free_int("tracknumber", 14) assert iface.get_free_int("tracknumber") == 14 iface.save() iface_reread = Ogg(mutagen.File(empty_ogg_opus_path)) assert iface_reread.get_free_int("tracknumber") == 14 tags = mutagen.File(iface.track_path).tags assert len(tags) == 1 assert tags.items()[0] == ("tracknumber", ["14"])