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'])