From e8b8bf853dcc098f3644dd0e2c22615eca05593f Mon Sep 17 00:00:00 2001 From: eggplants Date: Fri, 4 Feb 2022 04:25:18 +0900 Subject: [PATCH] add: type annotation to test modules --- tests/__init__.py | 0 tests/test_availability_api.py | 19 +++++++++++-------- tests/test_cdx_api.py | 4 ++-- tests/test_cdx_snapshot.py | 2 +- tests/test_cdx_utils.py | 30 ++++++++++++++++-------------- tests/test_save_api.py | 24 +++++++++++++----------- tests/test_utils.py | 4 ++-- 7 files changed, 45 insertions(+), 38 deletions(-) delete mode 100644 tests/__init__.py diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_availability_api.py b/tests/test_availability_api.py index 3b2b812..42afbc5 100644 --- a/tests/test_availability_api.py +++ b/tests/test_availability_api.py @@ -15,13 +15,13 @@ url = "https://example.com/" user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36" -def rndstr(n): +def rndstr(n: int) -> str: return "".join( random.choice(string.ascii_uppercase + string.digits) for _ in range(n) ) -def test_oldest(): +def test_oldest() -> None: """ Test the oldest archive of Google.com and also checks the attributes. """ @@ -33,12 +33,15 @@ def test_oldest(): assert "2002" in oldest_archive_url oldest_timestamp = oldest.timestamp() assert abs(oldest_timestamp - now) > timedelta(days=7000) # More than 19 years - assert availability_api.JSON["archived_snapshots"]["closest"]["available"] is True + assert ( + availability_api.JSON is not None + and availability_api.JSON["archived_snapshots"]["closest"]["available"] is True + ) assert repr(oldest).find("example.com") != -1 assert "2002" in str(oldest) -def test_newest(): +def test_newest() -> None: """ Assuming that the recent most Google Archive was made no more earlier than last one day which is 86400 seconds. @@ -54,7 +57,7 @@ def test_newest(): assert abs(newest_timestamp - now) < timedelta(seconds=86400 * 3) -def test_invalid_json(): +def test_invalid_json() -> None: """ When the API is malfunctioning or we don't pass a URL it may return invalid JSON data. """ @@ -63,7 +66,7 @@ def test_invalid_json(): _ = availability_api.archive_url -def test_no_archive(): +def test_no_archive() -> None: """ ArchiveNotInAvailabilityAPIResponse may be raised if Wayback Machine did not replied with the archive despite the fact that we know the site has million @@ -79,7 +82,7 @@ def test_no_archive(): _ = availability_api.archive_url -def test_no_api_call_str_repr(): +def test_no_api_call_str_repr() -> None: """ Some entitled users maybe want to see what is the string representation if they don’t make any API requests. @@ -92,7 +95,7 @@ def test_no_api_call_str_repr(): assert "" == str(availability_api) -def test_no_call_timestamp(): +def test_no_call_timestamp() -> None: """ If no API requests were made the bound timestamp() method returns the datetime.max as a default value. diff --git a/tests/test_cdx_api.py b/tests/test_cdx_api.py index d574954..a119dcf 100644 --- a/tests/test_cdx_api.py +++ b/tests/test_cdx_api.py @@ -1,7 +1,7 @@ from waybackpy.cdx_api import WaybackMachineCDXServerAPI -def test_a(): +def test_a() -> None: user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" url = "https://twitter.com/jack" @@ -21,7 +21,7 @@ def test_a(): assert snapshot.timestamp.startswith("2010") -def test_b(): +def test_b() -> None: user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" url = "https://www.google.com" diff --git a/tests/test_cdx_snapshot.py b/tests/test_cdx_snapshot.py index baea40e..98bcd04 100644 --- a/tests/test_cdx_snapshot.py +++ b/tests/test_cdx_snapshot.py @@ -3,7 +3,7 @@ from datetime import datetime from waybackpy.cdx_snapshot import CDXSnapshot -def test_CDXSnapshot(): +def test_CDXSnapshot() -> None: sample_input = "org,archive)/ 20080126045828 http://github.com text/html 200 Q4YULN754FHV2U6Q5JUT6Q2P57WEWNNY 1415" prop_values = sample_input.split(" ") properties = {} diff --git a/tests/test_cdx_utils.py b/tests/test_cdx_utils.py index 406e7e6..a7f5790 100644 --- a/tests/test_cdx_utils.py +++ b/tests/test_cdx_utils.py @@ -1,3 +1,5 @@ +from typing import Any, Dict, List + import pytest from waybackpy.cdx_utils import ( @@ -11,15 +13,15 @@ from waybackpy.cdx_utils import ( from waybackpy.exceptions import WaybackError -def test_get_total_pages(): +def test_get_total_pages() -> None: url = "twitter.com" user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15" assert get_total_pages(url=url, user_agent=user_agent) >= 56 -def test_full_url(): - params = {} +def test_full_url() -> None: endpoint = "https://web.archive.org/cdx/search/cdx" + params: Dict[str, Any] = {} assert endpoint == full_url(endpoint, params) params = {"a": "1"} @@ -39,36 +41,36 @@ def test_full_url(): ) -def test_get_response(): +def test_get_response() -> None: url = "https://github.com" user_agent = ( "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0" ) headers = {"User-Agent": "%s" % user_agent} response = get_response(url, headers=headers) - assert response.status_code == 200 + assert not isinstance(response, Exception) and response.status_code == 200 url = "http/wwhfhfvhvjhmom" with pytest.raises(WaybackError): get_response(url, headers=headers) -def test_check_filters(): - filters = [] +def test_check_filters() -> None: + filters: List[str] = [] check_filters(filters) filters = ["statuscode:200", "timestamp:20215678901234", "original:https://url.com"] check_filters(filters) with pytest.raises(WaybackError): - check_filters("not-list") + check_filters("not-list") # type: ignore[arg-type] with pytest.raises(WaybackError): check_filters(["invalid"]) -def test_check_collapses(): - collapses = [] +def test_check_collapses() -> None: + collapses: List[str] = [] check_collapses(collapses) collapses = ["timestamp:10"] @@ -77,7 +79,7 @@ def test_check_collapses(): collapses = ["urlkey"] check_collapses(collapses) - collapses = "urlkey" # NOT LIST + collapses = "urlkey" # type: ignore[assignment] with pytest.raises(WaybackError): check_collapses(collapses) @@ -86,11 +88,11 @@ def test_check_collapses(): check_collapses(collapses) -def test_check_match_type(): - assert check_match_type(None, "url") is None +def test_check_match_type() -> None: + assert check_match_type(None, "url") match_type = "exact" url = "test_url" - assert check_match_type(match_type, url) is None + assert check_match_type(match_type, url) url = "has * in it" with pytest.raises(WaybackError): diff --git a/tests/test_save_api.py b/tests/test_save_api.py index 7cd725d..d1717e4 100644 --- a/tests/test_save_api.py +++ b/tests/test_save_api.py @@ -9,13 +9,13 @@ from waybackpy.exceptions import MaximumSaveRetriesExceeded from waybackpy.save_api import WaybackMachineSaveAPI -def rndstr(n): +def rndstr(n: int) -> str: return "".join( random.choice(string.ascii_uppercase + string.digits) for _ in range(n) ) -def test_save(): +def test_save() -> None: url = "https://github.com/akamhy/waybackpy" user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" save_api = WaybackMachineSaveAPI(url, user_agent) @@ -31,7 +31,7 @@ def test_save(): assert isinstance(save_api.timestamp(), datetime) -def test_max_redirect_exceeded(): +def test_max_redirect_exceeded() -> None: with pytest.raises(MaximumSaveRetriesExceeded): url = "https://%s.gov" % rndstr user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" @@ -39,7 +39,7 @@ def test_max_redirect_exceeded(): save_api.save() -def test_sleep(): +def test_sleep() -> None: """ sleeping is actually very important for SaveAPI interface stability. @@ -60,7 +60,7 @@ def test_sleep(): assert (e_time - s_time) >= 5 -def test_timestamp(): +def test_timestamp() -> None: url = "https://example.com" user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" save_api = WaybackMachineSaveAPI(url, user_agent) @@ -75,7 +75,7 @@ def test_timestamp(): assert save_api.cached_save is True -def test_archive_url_parser(): +def test_archive_url_parser() -> None: """ Testing three regex for matches and also tests the response URL. """ @@ -83,7 +83,7 @@ def test_archive_url_parser(): user_agent = "Mozilla/5.0 (MacBook Air; M1 Mac OS X 11_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/604.1" save_api = WaybackMachineSaveAPI(url, user_agent) - save_api.headers = """ + save_api.headers_str = """ START Content-Location: /web/20201126185327/https://www.scribbr.com/citing-sources/et-al END @@ -94,7 +94,7 @@ def test_archive_url_parser(): == "https://web.archive.org/web/20201126185327/https://www.scribbr.com/citing-sources/et-al" ) - save_api.headers = """ + save_api.headers_str = """ {'Server': 'nginx/1.15.8', 'Date': 'Sat, 02 Jan 2021 09:40:25 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-Archive-Orig-Server': 'nginx', 'X-Archive-Orig-Date': 'Sat, 02 Jan 2021 09:40:09 GMT', 'X-Archive-Orig-Transfer-Encoding': 'chunked', 'X-Archive-Orig-Connection': 'keep-alive', 'X-Archive-Orig-Vary': 'Accept-Encoding', 'X-Archive-Orig-Last-Modified': 'Fri, 01 Jan 2021 12:19:00 GMT', 'X-Archive-Orig-Strict-Transport-Security': 'max-age=31536000, max-age=0;', 'X-Archive-Guessed-Content-Type': 'text/html', 'X-Archive-Guessed-Charset': 'utf-8', 'Memento-Datetime': 'Sat, 02 Jan 2021 09:40:09 GMT', 'Link': '; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Mon, 01 Jun 2020 08:29:11 GMT", ; rel="prev memento"; datetime="Thu, 26 Nov 2020 18:53:27 GMT", ; rel="memento"; datetime="Sat, 02 Jan 2021 09:40:09 GMT", ; rel="last memento"; datetime="Sat, 02 Jan 2021 09:40:09 GMT"', 'Content-Security-Policy': "default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org analytics.archive.org pragma.archivelab.org", 'X-Archive-Src': 'spn2-20210102092956-wwwb-spn20.us.archive.org-8001.warc.gz', 'Server-Timing': 'captures_list;dur=112.646325, exclusion.robots;dur=0.172010, exclusion.robots.policy;dur=0.158205, RedisCDXSource;dur=2.205932, esindex;dur=0.014647, LoadShardBlock;dur=82.205012, PetaboxLoader3.datanode;dur=70.750239, CDXLines.iter;dur=24.306278, load_resource;dur=26.520179', 'X-App-Server': 'wwwb-app200', 'X-ts': '200', 'X-location': 'All', 'X-Cache-Key': 'httpsweb.archive.org/web/20210102094009/https://www.scribbr.com/citing-sources/et-al/IN', 'X-RL': '0', 'X-Page-Cache': 'MISS', 'X-Archive-Screenname': '0', 'Content-Encoding': 'gzip'} """ @@ -103,7 +103,7 @@ def test_archive_url_parser(): == "https://web.archive.org/web/20210102094009/https://www.scribbr.com/citing-sources/et-al/" ) - save_api.headers = """ + save_api.headers_str = """ START X-Cache-Key: https://web.archive.org/web/20171128185327/https://www.scribbr.com/citing-sources/et-al/US END @@ -114,7 +114,9 @@ def test_archive_url_parser(): == "https://web.archive.org/web/20171128185327/https://www.scribbr.com/citing-sources/et-al/" ) - save_api.headers = "TEST TEST TEST AND NO MATCH - TEST FOR RESPONSE URL MATCHING" + save_api.headers_str = ( + "TEST TEST TEST AND NO MATCH - TEST FOR RESPONSE URL MATCHING" + ) save_api.response_url = "https://web.archive.org/web/20171128185327/https://www.scribbr.com/citing-sources/et-al" assert ( save_api.archive_url_parser() @@ -122,7 +124,7 @@ def test_archive_url_parser(): ) -def test_archive_url(): +def test_archive_url() -> None: """ Checks the attribute archive_url's value when the save method was not explicitly invoked by the end-user but the save method was invoked implicitly diff --git a/tests/test_utils.py b/tests/test_utils.py index 6f6d509..9af9c6d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -6,13 +6,13 @@ from waybackpy.utils import ( ) -def test_default_user_agent(): +def test_default_user_agent() -> None: assert ( DEFAULT_USER_AGENT == "waybackpy %s - https://github.com/akamhy/waybackpy" % __version__ ) -def test_latest_version(): +def test_latest_version() -> None: package_name = "waybackpy" assert latest_version_github(package_name) == latest_version_pypi(package_name)