import unittest import warnings from pathlib import Path from urllib.parse import urlparse from scrapy.exceptions import ScrapyDeprecationWarning from scrapy.http import Response, TextResponse, HtmlResponse from scrapy.utils.python import to_bytes from scrapy.utils.response import ( response_httprepr, open_in_browser, get_meta_refresh, get_base_url, response_status_message, ) __doctests__ = ["scrapy.utils.response"] class ResponseUtilsTest(unittest.TestCase): dummy_response = TextResponse(url="http://example.org/", body=b"dummy_response") def test_response_httprepr(self): with warnings.catch_warnings(): warnings.simplefilter("ignore", ScrapyDeprecationWarning) r1 = Response("http://www.example.com") self.assertEqual(response_httprepr(r1), b"HTTP/1.1 200 OK\r\n\r\n") r1 = Response( "http://www.example.com", status=404, headers={"Content-type": "text/html"}, body=b"Some body", ) self.assertEqual( response_httprepr(r1), b"HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\nSome body", ) r1 = Response( "http://www.example.com", status=6666, headers={"Content-type": "text/html"}, body=b"Some body", ) self.assertEqual( response_httprepr(r1), b"HTTP/1.1 6666 \r\nContent-Type: text/html\r\n\r\nSome body", ) def test_open_in_browser(self): url = "http:///www.example.com/some/page.html" body = b" test page test body " def browser_open(burl): path = urlparse(burl).path if not path or not Path(path).exists(): path = burl.replace("file://", "") bbody = Path(path).read_bytes() self.assertIn(b'', bbody) return True response = HtmlResponse(url, body=body) assert open_in_browser(response, _openfunc=browser_open), "Browser not called" resp = Response(url, body=body) self.assertRaises(TypeError, open_in_browser, resp, debug=True) def test_get_meta_refresh(self): r1 = HtmlResponse( "http://www.example.com", body=b""" Dummy blahablsdfsal& """, ) r2 = HtmlResponse( "http://www.example.com", body=b""" Dummy blahablsdfsal& """, ) r3 = HtmlResponse( "http://www.example.com", body=b"""