aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgabrielgio <gabriel.giovanini@pm.me>2021-07-18 21:04:03 +0200
committergabrielgio <gabriel.giovanini@pm.me>2021-07-18 21:04:03 +0200
commita413f5db697fd7f568aa3dd8e9d1406176cb924c (patch)
treefe3e33e67adf968a8ad36e980b51419461883f20
parent9a069be0ce53f41ef012ee6367e1f7fd96102c38 (diff)
downloadreddit-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.py7
-rw-r--r--test/test_providers.py44
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']