|
@@ -1,21 +1,25 @@
|
|
|
import os
|
|
|
import re
|
|
|
+import shutil
|
|
|
import unittest.mock
|
|
|
|
|
|
-from symuid import Track
|
|
|
+import pytest
|
|
|
+from symuid import PlayCount, Track
|
|
|
+from symuid._datetime import unix_epoch_time_to_datetime_utc
|
|
|
+from symuid._uuid import generate_uuid4_bytes
|
|
|
from symuid.sync import _main, sync
|
|
|
|
|
|
DUMMY_PATH_IGNORE_REGEX = re.compile(r'\.jpg$')
|
|
|
|
|
|
|
|
|
-def test_sync(empty_ogg_opus_path):
|
|
|
+def test_add_uuid(empty_ogg_opus_path):
|
|
|
assert Track(empty_ogg_opus_path).get_uuid() is None
|
|
|
sync(os.path.dirname(empty_ogg_opus_path),
|
|
|
path_ignore_regex=DUMMY_PATH_IGNORE_REGEX)
|
|
|
assert Track(empty_ogg_opus_path).get_uuid() is not None
|
|
|
|
|
|
|
|
|
-def test_sync_idempotent(empty_ogg_opus_path):
|
|
|
+def test_add_uuid_idempotent(empty_ogg_opus_path):
|
|
|
sync(os.path.dirname(empty_ogg_opus_path),
|
|
|
path_ignore_regex=DUMMY_PATH_IGNORE_REGEX)
|
|
|
uuid = Track(empty_ogg_opus_path).get_uuid()
|
|
@@ -24,8 +28,81 @@ def test_sync_idempotent(empty_ogg_opus_path):
|
|
|
assert Track(empty_ogg_opus_path).get_uuid() == uuid
|
|
|
|
|
|
|
|
|
-def test_main(empty_ogg_opus_path):
|
|
|
+def test_add_uuid_main(empty_ogg_opus_path):
|
|
|
assert Track(empty_ogg_opus_path).get_uuid() is None
|
|
|
with unittest.mock.patch('sys.argv', ['', os.path.dirname(empty_ogg_opus_path)]):
|
|
|
_main()
|
|
|
assert Track(empty_ogg_opus_path).get_uuid() is not None
|
|
|
+
|
|
|
+
|
|
|
+def test_sync_play_count(tmpdir, tracks_dir_path):
|
|
|
+ shutil.copyfile(
|
|
|
+ src=os.path.join(tracks_dir_path, 'id3v2.4-empty.mp3'),
|
|
|
+ dst=tmpdir.join('a1.mp3'),
|
|
|
+ )
|
|
|
+ shutil.copyfile(
|
|
|
+ src=os.path.join(tracks_dir_path, 'ogg-vorbis-empty.ogg'),
|
|
|
+ dst=tmpdir.join('a2.ogg'),
|
|
|
+ )
|
|
|
+ shutil.copyfile(
|
|
|
+ src=os.path.join(tracks_dir_path, 'ogg-opus-empty.opus'),
|
|
|
+ dst=tmpdir.join('a3.opus'),
|
|
|
+ )
|
|
|
+ shutil.copyfile(
|
|
|
+ src=os.path.join(tracks_dir_path, 'id3v2.4-empty.mp3'),
|
|
|
+ dst=tmpdir.join('b.mp3'),
|
|
|
+ )
|
|
|
+ uuid_a = generate_uuid4_bytes()
|
|
|
+ uuid_b = generate_uuid4_bytes()
|
|
|
+ track_a1 = Track(tmpdir.join('a1.mp3'))
|
|
|
+ track_a1.assign_uuid(uuid_a)
|
|
|
+ track_a2 = Track(tmpdir.join('a2.ogg'))
|
|
|
+ track_a2.assign_uuid(uuid_a)
|
|
|
+ track_a3 = Track(tmpdir.join('a3.opus'))
|
|
|
+ track_a3.assign_uuid(uuid_a)
|
|
|
+ track_b = Track(tmpdir.join('b.mp3'))
|
|
|
+ track_b.assign_uuid(uuid_b)
|
|
|
+ track_a1.register_play_count(PlayCount(
|
|
|
+ player='cmus',
|
|
|
+ library_id='lib1',
|
|
|
+ register_dt=unix_epoch_time_to_datetime_utc(0),
|
|
|
+ count=21,
|
|
|
+ ))
|
|
|
+ track_a1.register_play_count(PlayCount(
|
|
|
+ player='cmus',
|
|
|
+ library_id='lib1',
|
|
|
+ register_dt=unix_epoch_time_to_datetime_utc(1),
|
|
|
+ count=22,
|
|
|
+ ))
|
|
|
+ track_a2.register_play_count(PlayCount(
|
|
|
+ player='cmus',
|
|
|
+ library_id='lib1',
|
|
|
+ register_dt=unix_epoch_time_to_datetime_utc(0),
|
|
|
+ count=21,
|
|
|
+ ))
|
|
|
+ track_a2.register_play_count(PlayCount(
|
|
|
+ player='cmus',
|
|
|
+ library_id='lib2',
|
|
|
+ register_dt=unix_epoch_time_to_datetime_utc(2),
|
|
|
+ count=7,
|
|
|
+ ))
|
|
|
+ track_b.register_play_count(PlayCount(
|
|
|
+ player='cmus',
|
|
|
+ library_id='lib2',
|
|
|
+ register_dt=unix_epoch_time_to_datetime_utc(3),
|
|
|
+ count=4,
|
|
|
+ ))
|
|
|
+ sync(tmpdir, path_ignore_regex=DUMMY_PATH_IGNORE_REGEX)
|
|
|
+ play_counts_a1 = set(Track(tmpdir.join('a1.mp3')).get_play_counts())
|
|
|
+ play_counts_a2 = set(Track(tmpdir.join('a2.ogg')).get_play_counts())
|
|
|
+ play_counts_a3 = set(Track(tmpdir.join('a3.opus')).get_play_counts())
|
|
|
+ play_counts_b = set(Track(tmpdir.join('b.mp3')).get_play_counts())
|
|
|
+ assert len(play_counts_a1) == 3
|
|
|
+ assert len(play_counts_a1) == len(play_counts_a2)
|
|
|
+ assert len(play_counts_a1) == len(play_counts_a3)
|
|
|
+ assert play_counts_a1 == play_counts_a2
|
|
|
+ assert {pc.register_dt.timestamp() for pc in play_counts_a1} \
|
|
|
+ == pytest.approx({0, 1, 2})
|
|
|
+ assert len(play_counts_b) == 1
|
|
|
+ assert {pc.register_dt.timestamp() for pc in play_counts_b} \
|
|
|
+ == pytest.approx({3})
|