import os import praw import pytest import importer.providers as providers 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('importer.providers.youtube_dl_base.youtube_dl.YoutubeDL.process_info') @pytest.mark.parametrize("provider", [ providers.IReddit, providers.Imgur, providers.RawImageProviderBase, providers.RedGifs, providers.Youtube, providers.YoutubeDlProviderBase ]) def test_provider(provider, mock_ydl_download): for test in provider._TEST: with provider(url=test['url']) as p: p.download() assert p.downloaded assert p.paths == test['paths'] @reddit_env @pytest.mark.parametrize("provider", [ providers.GReddit ]) def test_provider_with_reddit(provider, mock_ydl_download): username = os.environ.get('USERNAME', '') password = os.environ.get('PASSWORD', '') client_id = os.environ.get('CLIENT_ID', '') client_secret = os.environ.get('CLIENT_SECRET', '') reddit = praw.Reddit(client_id=client_id, client_secret=client_secret, password=password, user_agent="reddit-nextcloud-importer", username=username) for test in provider._TEST: with provider(url=test['url'], reddit=reddit) as p: p.download() assert p.downloaded assert p.paths == test['paths']