49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
|
from pathlib import Path
|
||
|
from unittest.mock import MagicMock
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
import croaker.playlist
|
||
|
import croaker.path
|
||
|
|
||
|
@pytest.fixture(autouse=True)
|
||
|
def mock_env(monkeypatch):
|
||
|
fixtures = Path(__file__).parent / 'fixtures'
|
||
|
monkeypatch.setenv('CROAKER_ROOT', str(fixtures))
|
||
|
monkeypatch.setenv('MEDIA_GLOB', '*.mp3,*.foo,*.bar')
|
||
|
|
||
|
|
||
|
def test_playlist_loading():
|
||
|
pl = croaker.playlist.Playlist(name='test_playlist')
|
||
|
path = str(pl.path)
|
||
|
tracks = [str(t) for t in pl.tracks]
|
||
|
|
||
|
assert path == str(croaker.path.playlist_root() / pl.name)
|
||
|
assert pl.name == 'test_playlist'
|
||
|
assert tracks[0] == f"{path}/_theme.mp3"
|
||
|
assert f"{path}/one.mp3" in tracks
|
||
|
assert f"{path}/two.mp3" in tracks
|
||
|
assert f"{path}/one.foo" in tracks
|
||
|
assert f"{path}/one.baz" not in tracks
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('paths, make_theme, expected_count', [
|
||
|
(['test_playlist'], True, 4),
|
||
|
(['test_playlist'], False, 4),
|
||
|
(['test_playlist', 'sources/one.mp3'], True, 5),
|
||
|
(['test_playlist', 'sources/one.mp3'], False, 5),
|
||
|
])
|
||
|
def test_playlist_creation(monkeypatch, paths, make_theme, expected_count):
|
||
|
new_symlinks = []
|
||
|
|
||
|
def symlink(target):
|
||
|
new_symlinks.append(target)
|
||
|
|
||
|
pl = croaker.playlist.Playlist(name='foo')
|
||
|
monkeypatch.setattr(croaker.playlist.Path, 'unlink', MagicMock())
|
||
|
monkeypatch.setattr(croaker.playlist.Path, 'symlink_to', MagicMock(side_effect=symlink))
|
||
|
monkeypatch.setattr(croaker.playlist.Path, 'mkdir', MagicMock())
|
||
|
|
||
|
pl.add([croaker.path.playlist_root() / p for p in paths], make_theme)
|
||
|
assert len(new_symlinks) == expected_count
|