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