diff --git a/tests/httpmocks.py b/tests/httpmocks.py index a0a12160a..da9d2b108 100644 --- a/tests/httpmocks.py +++ b/tests/httpmocks.py @@ -12,14 +12,11 @@ try: except ImportError: from backports.functools_lru_cache import lru_cache -from responses import add, GET, POST - - -_basedir = os.path.dirname(__file__) +from responses import add, GET def _file(name): - return os.path.join(_basedir, 'responses', name) + return os.path.join(os.path.dirname(__file__), 'responses', name) @lru_cache() @@ -34,27 +31,20 @@ def _img(): return f.read() +def page(url, pagename): + add(GET, url, _content(pagename)) + + +def png(url): + add(GET, url, _img(), content_type='image/jpeg') + + +def jpeg(url): + add(GET, url, _img(), content_type='image/jpeg') + + def xkcd(): - add(GET, 'https://xkcd.com/', _content('xkcd-1899')) - for page in (302, 303, 1898, 1899): - add(GET, 'https://xkcd.com/%i/' % page, _content('xkcd-%i' % page)) - add(GET, re.compile(r'https://imgs\.xkcd\.com/.*\.png'), _img(), content_type='image/png') - - -def bloomingfaeries(): - add(GET, 'http://www.bloomingfaeries.com/', _content('bf-home')) - add(GET, 'http://www.bloomingfaeries.com/comic/public/bloomin-faeries-405/', _content('bf-405')) - - add(GET, re.compile(r'http://www\.bloomingfaeries\.com/.*\.jpg'), _img(), content_type='image/jpeg') - - -def zenpencils(): - add(GET, 'https://zenpencils.com/', _content('zp-home')) - add(GET, 'https://zenpencils.com/comic/missing/', _content('zp-223')) - add(GET, 'https://zenpencils.com/comic/lifejacket/', _content('zp-222')) - add(GET, re.compile(r'https://cdn-zenpencils\.netdna-ssl\.com/wp-content/uploads/.*\.jpg'), _img(), - content_type='image/jpeg') - - -def vote(): - add(POST, 'https://buildbox.23.gs/count/', '') + page('https://xkcd.com/', 'xkcd-1899') + for num in (302, 303, 1898, 1899): + page('https://xkcd.com/%i/' % num, 'xkcd-%i' % num) + png(re.compile(r'https://imgs\.xkcd\.com/.*\.png')) diff --git a/tests/responses/turnoff-229.html.gz b/tests/responses/turnoff-229.html.gz new file mode 100644 index 000000000..d7896543e Binary files /dev/null and b/tests/responses/turnoff-229.html.gz differ diff --git a/tests/responses/turnoff-home.html.gz b/tests/responses/turnoff-home.html.gz new file mode 100644 index 000000000..be22e726b Binary files /dev/null and b/tests/responses/turnoff-home.html.gz differ diff --git a/tests/test_dosage.py b/tests/test_dosage.py index 2fd5744ed..3896701f2 100644 --- a/tests/test_dosage.py +++ b/tests/test_dosage.py @@ -5,12 +5,14 @@ from __future__ import absolute_import, division, print_function +import json +import re + import pytest import responses import dosagelib.cmd import httpmocks -import json def cmd(*options): @@ -29,6 +31,9 @@ def cmd_err(*options): class TestDosage(object): """Test the dosage commandline client.""" + # This shouldn't hit the network at all, so add responses without mocks to + # make sure it doesn't do that + @responses.activate def test_list_comics(self): for option in ("-l", "--list", "--singlelist"): cmd_ok(option) @@ -62,10 +67,13 @@ class TestDosage(object): @responses.activate def test_fetch_html_and_rss_2(self, tmpdir): - httpmocks.bloomingfaeries() + httpmocks.page('http://www.bloomingfaeries.com/', 'bf-home') + httpmocks.page(re.compile('http://www.*faeries-405/'), 'bf-405') + httpmocks.png(re.compile(r'http://www\.bloomingfaeries\.com/.*\.jpg')) + cmd_ok("--numstrips", "2", "--baseurl", "bla", "--basepath", - str(tmpdir), "--output", "rss", "--output", "html", "--adult", - "BloomingFaeries") + str(tmpdir), "--output", "rss", "--output", "html", "--adult", + "BloomingFaeries") @responses.activate def test_fetch_indexed(self, tmpdir): @@ -74,8 +82,11 @@ class TestDosage(object): @responses.activate def test_json_page_key_bounce_and_multi_image(self, tmpdir): - httpmocks.zenpencils() - print(tmpdir) + httpmocks.page('https://zenpencils.com/', 'zp-home') + httpmocks.page('https://zenpencils.com/comic/missing/', 'zp-223') + httpmocks.page('https://zenpencils.com/comic/lifejacket/', 'zp-222') + httpmocks.jpeg(re.compile(r'https://cdn-.*\.jpg')) + cmd_ok("-v", "-b", str(tmpdir), "-o", "json", "ZenPencils") directory = tmpdir.join('ZenPencils') diff --git a/tests/test_modules.py b/tests/test_modules.py new file mode 100644 index 000000000..bbf8325af --- /dev/null +++ b/tests/test_modules.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2019 Tobias Gruetzmacher + +from __future__ import absolute_import, division, print_function + +import re + +import responses + +import dosagelib.cmd +import httpmocks + + +def cmd(*options): + """'Fake' run dosage with given options.""" + assert dosagelib.cmd.main(("--allow-multiple",) + options) == 0 + + +class TestModules(object): + """Test that specific comic modules work correctly.""" + + @responses.activate + def test_turnoff(self, tmpdir): + httpmocks.page('https://turnoff.us/', 'turnoff-home') + httpmocks.page('https://turnoff.us/geek/the-bad-design-punisher', + 'turnoff-229') + + httpmocks.png(re.compile(r'https://turnoff\.us/image/en/.*\.png')) + + cmd('--numstrips', '2', '--basepath', str(tmpdir), 'turnoff') diff --git a/tests/test_vote.py b/tests/test_vote.py index c8d3fbb00..de3856cdc 100644 --- a/tests/test_vote.py +++ b/tests/test_vote.py @@ -1,14 +1,13 @@ # -*- coding: utf-8 -*- # Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs # Copyright (C) 2012-2014 Bastian Kleineidam -# Copyright (C) 2015-2017 Tobias Gruetzmacher +# Copyright (C) 2015-2019 Tobias Gruetzmacher from __future__ import absolute_import, division, print_function import responses from dosagelib import scraper -import httpmocks class ATestScraper(scraper._BasicScraper): @@ -16,8 +15,8 @@ class ATestScraper(scraper._BasicScraper): class TestVote(object): - @responses.activate def test_vote(self): - httpmocks.vote() + responses.add(responses.POST, 'https://buildbox.23.gs/count/', '') + ATestScraper('Test_Test').vote()