diff options
author | gabrielgio <gabriel.giovanini@pm.me> | 2021-07-18 21:04:03 +0200 |
---|---|---|
committer | gabrielgio <gabriel.giovanini@pm.me> | 2021-07-18 21:04:03 +0200 |
commit | a413f5db697fd7f568aa3dd8e9d1406176cb924c (patch) | |
tree | fe3e33e67adf968a8ad36e980b51419461883f20 | |
parent | 9a069be0ce53f41ef012ee6367e1f7fd96102c38 (diff) | |
download | reddit-nextcloud-importer-a413f5db697fd7f568aa3dd8e9d1406176cb924c.tar.gz reddit-nextcloud-importer-a413f5db697fd7f568aa3dd8e9d1406176cb924c.tar.bz2 reddit-nextcloud-importer-a413f5db697fd7f568aa3dd8e9d1406176cb924c.zip |
ref: Add test for GReddit
Add test for GReddit. It will check for all necessary variable to be
able to login on reddit as it is required by the praw library.
Also add mock to the `youtube-dl` download function. It will make the
test run faster.
-rw-r--r-- | importer/providers/g_reddit.py | 7 | ||||
-rw-r--r-- | test/test_providers.py | 44 |
2 files changed, 48 insertions, 3 deletions
diff --git a/importer/providers/g_reddit.py b/importer/providers/g_reddit.py index 53ee5df..e0341e0 100644 --- a/importer/providers/g_reddit.py +++ b/importer/providers/g_reddit.py @@ -5,6 +5,12 @@ from importer.providers.raw_image_base import RawImageProviderBase class GReddit(RawImageProviderBase): regex = "^.*www.reddit.com/gallery.*$" + _TEST = [{ + "url": "https://www.reddit.com/gallery/mik7c9", + "paths": ['source_hlokpsyhgrq61.jpg', 'source_n31c2y7igrq61.jpg', 'source_7eg0o76igrq61.jpg', + 'source_whl12jbigrq61.jpg', 'source_4uok762igrq61.jpg', 'source_t3pgm64igrq61.jpg', + 'source_ymc4hv9igrq61.jpg'] + }] def __init__(self, url: str, reddit: Reddit): super(GReddit, self).__init__(url) @@ -17,3 +23,4 @@ class GReddit(RawImageProviderBase): url = value['s']['u'] path = self._download_raw_file(url) self.paths.append(path) + self.downloaded = True diff --git a/test/test_providers.py b/test/test_providers.py index 9a5084e..32d81bd 100644 --- a/test/test_providers.py +++ b/test/test_providers.py @@ -1,9 +1,23 @@ +import os + import praw import pytest -from importer.downloader import Downloader import importer.providers as providers -from importer.providers import ProviderBase + +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", @@ -15,9 +29,33 @@ from importer.providers import ProviderBase providers.Youtube, providers.YoutubeDlProviderBase ]) -def test_provider(provider): +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'] |