From a413f5db697fd7f568aa3dd8e9d1406176cb924c Mon Sep 17 00:00:00 2001 From: gabrielgio Date: Sun, 18 Jul 2021 21:04:03 +0200 Subject: 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. --- importer/providers/g_reddit.py | 7 +++++++ 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'] -- cgit v1.2.3