import os import pytest from src.downloader import SourceType, Downloader reddit_env = pytest.mark.skipif( os.environ.get('CLIENT_ID', '') == '' or os.environ.get('CLIENT_SECRET', '') == '' or os.environ.get('USERNAME', '') == '' or os.environ.get('PASSWORD', '') == '' , reason="Require reddit env variables to be set." ) @pytest.fixture def mock_ydl_download(mocker): # this function is responsible for downloading the file return mocker.patch('downloader.youtube_dl.YoutubeDL.process_info') @pytest.mark.parametrize('url,source_type', [ ("https://i.redd.it/pjj1ll1b2rr41.jpg", SourceType.IREDDIT), ("https://gfycat.com/presentdangerousdromedary", SourceType.GFYCAT), ("https://i.imgur.com/fXLMjfp.jpg", SourceType.IMAGURJPG), ("https://redgifs.com/watch/ripesnivelingfiddlercrab", SourceType.REDGIFS), ("https://www.youtube.com/watch?v=oLkdqptmfng", SourceType.YOUTUBE), ("https://v.redd.it/42j6r7i8z7151", SourceType.VREDDIT), ("https://www.reddit.com/gallery/mik7c9", SourceType.GREDDIT), ("https://duckduckgo.com", SourceType.UNKNOWN), ]) def test_source_type(url, source_type): with Downloader(url, "1-A") as d: assert d.source_type == source_type @pytest.mark.parametrize('url,paths', [ ("https://gfycat.com/presentdangerousdromedary", ["source_presentdangerousdromedary.mp4"]), ("https://redgifs.com/watch/ripesnivelingfiddlercrab", ["source_RipeSnivelingFiddlercrab.mp4", 'source_RipeSnivelingFiddlercrab-mobile.mp4']), ("https://www.youtube.com/watch?v=oLkdqptmfng", ["source_oLkdqptmfng.mp4"]), ("https://v.redd.it/42j6r7i8z7151", ["source_42j6r7i8z7151.mp4"]), ]) def test_download_youtube_dl(url, paths, mock_ydl_download): with Downloader(url, "1-A") as d: assert d.downloaded is False d.download() assert d.downloaded is True assert d.paths == paths mock_ydl_download.assert_called() @pytest.mark.parametrize('url,path', [ ("https://i.redd.it/pjj1ll1b2rr41.jpg", "source_pjj1ll1b2rr41.jpg"), ("https://i.imgur.com/fXLMjfp.jpg", "source_fXLMjfp.jpg"), ]) def test_download_raw_data(url, path): with Downloader(url, "1-A") as d: assert d.downloaded is False d.download() assert d.paths == [path] assert d.downloaded is True @reddit_env def test_praw_download(): client_id = os.environ.get('CLIENT_ID', '') client_secret = os.environ.get('CLIENT_SECRET', '') username = os.environ.get('USERNAME', '') password = os.environ.get('PASSWORD', '') files = {'source_hlokpsyhgrq61.jpg', 'source_n31c2y7igrq61.jpg', 'source_7eg0o76igrq61.jpg', 'source_whl12jbigrq61.jpg', 'source_4uok762igrq61.jpg', 'source_t3pgm64igrq61.jpg', 'source_ymc4hv9igrq61.jpg'} with Downloader("https://www.reddit.com/gallery/mik7c9", "1-A", client_id=client_id, client_secret=client_secret, password=password, user_agent="hcrawler", username=username) as d: assert d.downloaded is False d.download() assert d.downloaded is True assert set(d.paths) == files