import json import pytest from requests import Response from libretime_worker.tasks import extract_filename, podcast_download from .fixtures import fixtures_path @pytest.mark.parametrize( "file", [ ("s1-stereo.ogg"), ("s1-stereo-tagged.mp3"), ("malformed.mp3"), ], ) @pytest.mark.parametrize("override_album", [(True), (False)]) def test_podcast_download(requests_mock, file, override_album): episode_url = f"https://remote.example.org/{file}" episode_filepath = fixtures_path / file requests_mock.get(episode_url, content=episode_filepath.read_bytes()) requests_mock.post("http://localhost/rest/media", json={"id": 1}) result = podcast_download( episode_id=1, episode_url=episode_url, episode_title="My episode", podcast_name="My podcast!", override_album=override_album, ) assert json.loads(result) == { "episodeid": 1, "fileid": 1, "status": 1, } def test_podcast_download_invalid_file(requests_mock): episode_url = "https://remote.example.org/invalid" requests_mock.get(episode_url, content=b"some invalid content") requests_mock.post("http://localhost/rest/media", json={"id": 1}) result = podcast_download( episode_id=1, episode_url=episode_url, episode_title="My episode", podcast_name="My podcast!", override_album=False, ) assert json.loads(result) == { "episodeid": 1, "status": 0, "error": "could not determine episode 1 file type", } @pytest.mark.parametrize( "url, header, expected", [ ("http://example.com/from-url.mp3", None, "from-url.mp3"), ( "http://example.com/from-url.mp3", 'attachment; filename="from-header.mp3"', "from-header.mp3", ), ("http://example.com/from-url.mp3", "attachment", "from-url.mp3"), ], ) def test_extract_filename(url, header, expected): resp = Response() resp.url = url if header is not None: resp.headers["Content-Disposition"] = header assert extract_filename(resp) == expected