Add some tests for DownloadFactory

This commit is contained in:
Serene-Arc
2021-03-01 09:51:44 +10:00
committed by Ali Parlakci
parent 62e104653d
commit d096580da7
2 changed files with 48 additions and 17 deletions

View File

@@ -10,25 +10,37 @@ from bulkredditdownloader.site_downloaders.direct import Direct
from bulkredditdownloader.site_downloaders.erome import Erome from bulkredditdownloader.site_downloaders.erome import Erome
from bulkredditdownloader.site_downloaders.gallery import Gallery from bulkredditdownloader.site_downloaders.gallery import Gallery
from bulkredditdownloader.site_downloaders.gfycat import Gfycat from bulkredditdownloader.site_downloaders.gfycat import Gfycat
from bulkredditdownloader.site_downloaders.gif_delivery_network import GifDeliveryNetwork
from bulkredditdownloader.site_downloaders.imgur import Imgur from bulkredditdownloader.site_downloaders.imgur import Imgur
from bulkredditdownloader.site_downloaders.redgifs import Redgifs from bulkredditdownloader.site_downloaders.redgifs import Redgifs
from bulkredditdownloader.site_downloaders.self_post import SelfPost
from bulkredditdownloader.site_downloaders.vreddit import VReddit
from bulkredditdownloader.site_downloaders.youtube import Youtube
class DownloadFactory: class DownloadFactory:
@staticmethod @staticmethod
def pull_lever(url: str) -> Type[BaseDownloader]: def pull_lever(url: str) -> Type[BaseDownloader]:
url_beginning = r'\s*(https?://(www.)?)' url_beginning = r'\s*(https?://(www\.)?)'
if re.match(url_beginning + r'gfycat.com.*', url): if re.match(url_beginning + r'erome\.com.*', url):
return Gfycat
elif re.match(url_beginning + r'erome.com.*', url):
return Erome return Erome
elif re.match(url_beginning + r'reddit\.com/gallery/.*', url):
return Gallery
elif re.match(url_beginning + r'gfycat\.', url):
return Gfycat
elif re.match(url_beginning + r'gifdeliverynetwork', url):
return GifDeliveryNetwork
elif re.match(url_beginning + r'imgur.*', url): elif re.match(url_beginning + r'imgur.*', url):
return Imgur return Imgur
elif re.match(url_beginning + r'redgifs.com', url): elif re.match(url_beginning + r'redgifs.com', url):
return Redgifs return Redgifs
elif re.match(url_beginning + r'[vi].redd\.it.*', url): elif re.match(url_beginning + r'reddit\.com/r/', url):
return SelfPost
elif re.match(url_beginning + r'v\.redd\.it', url):
return VReddit
elif re.match(url_beginning + r'youtube', url):
return Youtube
elif re.match(url_beginning + r'i\.redd\.it.*', url) or re.match(url_beginning + r'.*\..{3,4}$', url):
return Direct return Direct
elif re.match(url_beginning + r'reddit.com/gallery/.*', url):
return Gallery
else: else:
raise NotADownloadableLinkError('No downloader module exists for url {}'.format(url)) raise NotADownloadableLinkError('No downloader module exists for url {}'.format(url))

View File

@@ -1,25 +1,44 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# coding=utf-8 # coding=utf-8
import praw
import pytest import pytest
from bulkredditdownloader.errors import NotADownloadableLinkError
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
from bulkredditdownloader.site_downloaders.direct import Direct
from bulkredditdownloader.site_downloaders.download_factory import DownloadFactory from bulkredditdownloader.site_downloaders.download_factory import DownloadFactory
from bulkredditdownloader.site_downloaders.erome import Erome from bulkredditdownloader.site_downloaders.erome import Erome
from bulkredditdownloader.site_downloaders.gallery import Gallery
from bulkredditdownloader.site_downloaders.gfycat import Gfycat from bulkredditdownloader.site_downloaders.gfycat import Gfycat
from bulkredditdownloader.site_downloaders.gif_delivery_network import GifDeliveryNetwork
from bulkredditdownloader.site_downloaders.imgur import Imgur from bulkredditdownloader.site_downloaders.imgur import Imgur
from bulkredditdownloader.site_downloaders.redgifs import Redgifs from bulkredditdownloader.site_downloaders.redgifs import Redgifs
from bulkredditdownloader.site_downloaders.self_post import SelfPost
from bulkredditdownloader.site_downloaders.vreddit import VReddit
from bulkredditdownloader.site_downloaders.youtube import Youtube
@pytest.mark.parametrize('test_url', ('https://gfycat.com/joyfulpitifulirishterrier', @pytest.mark.online
'https://gfycat.com/blaringaridjellyfish-jensen-ackles-supernatural')) @pytest.mark.reddit
def test_factory_gfycat(test_url: str): @pytest.mark.parametrize(('test_submission_id', 'expected_class'), (
result = DownloadFactory.pull_lever(test_url) ('lu8l8g', VReddit),
assert result is Gfycat ('lu29zn', SelfPost),
('lu2ykk', Direct), # Imgur direct link
('luh2pd', Direct), # Reddit direct link
('lu93m7', Gallery),
('luf1nu', Gfycat),
))
def test_factory_lever_good(test_submission_id: str, expected_class: BaseDownloader, reddit_instance: praw.Reddit):
submission = reddit_instance.submission(id=test_submission_id)
result = DownloadFactory.pull_lever(submission.url)
assert result is expected_class
@pytest.mark.parametrize('test_url', ('https://www.erome.com/a/bbezvaBn', @pytest.mark.parametrize('test_url', (
'https://www.erome.com/a/p14JFlnm')) 'random.com',
def test_factory_erome(test_url): 'bad',
result = DownloadFactory.pull_lever(test_url) ))
assert result is Erome def test_factory_lever_bad(test_url: str):
with pytest.raises(NotADownloadableLinkError):
DownloadFactory.pull_lever(test_url)