# paperdoorknob: Print glowfic # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3. import unittest import threading from http.server import BaseHTTPRequestHandler, HTTPServer import requests import paperdoorknob TIMEOUT = 8 class FakeGlowficHTTPRequestHandler(BaseHTTPRequestHandler): def _response_code(self) -> int: if self.path == "/not_found": return 404 if self.path == "/server_error": return 500 return 200 def do_GET(self) -> None: body = b'This is glowfic' self.send_response(self._response_code()) self.send_header("Content-type", "text/html") self.send_header("Content-Length", str(len(body))) self.end_headers() self.wfile.write(body) class TestFetch(unittest.TestCase): def setUp(self) -> None: web_server = HTTPServer(('', 0), FakeGlowficHTTPRequestHandler) self._port = web_server.socket.getsockname()[1] self._thread = threading.Thread(target=web_server.serve_forever) self._thread.start() self._stop_server = web_server.shutdown def tearDown(self) -> None: self._stop_server() self._thread.join() def testFetch(self) -> None: paperdoorknob.fetch(f"http://localhost:{self._port}", TIMEOUT) def testFetchErrors(self) -> None: with self.assertRaises(requests.HTTPError): paperdoorknob.fetch( f"http://localhost:{self._port}/not_found", TIMEOUT) with self.assertRaises(requests.HTTPError): paperdoorknob.fetch( f"http://localhost:{self._port}/server_error", TIMEOUT) if __name__ == '__main__': unittest.main()